You are on page 1of 13

PROGRAMACIN.

INGENIERA INFORMTICA J unio de 2007


Pag. 1
Apellidos Nombre

Firma NIA Grupo







Pregunta 1 (0,5 puntos).- Indicar si las siguientes afirmaciones son ciertas, y
explicar brevemente por qu.

a) Un objeto de una clase A que hereda de otra clase B siempre puede acceder a
todos los atributos heredados de B.
b) Una clase abstracta puede no tener ningn mtodo abstracto.


a) Falso. Depender de la visibilidad de los atributos de la clase B, si por ejemplo
son privados, no podr acceder.
b) Verdadero. Es posible declarar una clase como abstracta aunque no tenga
ningn mtodo abstracto, pero no al revs, es decir, si una clase tiene al menos
un mtodo abstracto tendr que ser abstracta.
EXAMEN PROGRAMACIN
15 de Junio de 2007
INGENIERA INFORMTICA
Primera parte: Cuestiones
1,5 horas
PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 2
Pregunta 2 (0,5 puntos).- Indicar si las siguientes afirmaciones son ciertas, y
explicar brevemente por qu.

a) Si utilizamos un objeto de la clase FileOutputStream para escribir datos en un
fichero y el fichero no existe, se crea automticamente.
b) Una clase puede tener varios mtodos con el mismo nombre.

a) Verdadero. El constructor de la clase FileOutputStream recibe como parmetro
un fichero sobre el que escribir y si no existe, intenta crearlo.
b) Verdadero. A esto se le conoce como mtodos sobrecargados y es vlido
siempre que al menos uno de los parmetros de entrada de cada mtodo sea
de distinto tipo o su nmero sea distinto. Ejemplo, podramos tener los
siguientes mtodos, todos con el mismo nombre:

int metodo1(int a, int b) {}
int metodo1(int a, float b) {}
int metodo1(int a) {}
int metodo1 (float a) {}
int metodo1 (String a, double b, short c) {}


Pregunta 3 (0,5 puntos).- Explicar en qu consiste el mtodo de ordenacin por
seleccin directa y mostrar paso a paso cmo se ordenara la lista (8,3,5,2,1,9,7,6)
usando este mtodo.

Para ordenar de menor a mayor por el mtodo de seleccin directa buscamos el elemento
de menor valor y lo intercambiamos con el primero de la lista. A continuacin buscamos el
segundo de menor valor y lo intercambiamos con el segundo de la lista y as
sucesivamente.

El proceso sera as:
(8,3,5,2,1,9,7,6)
(1,3,5,2,8,9,7,6)
(1,2,5,3,8,9,7,6)
(1,2,3,5,8,9,7,6)
(1,2,3,5,6,9,7,8)
(1,2,3,5,6,7,9,8)
(1,2,3,5,6,7,8,9)

PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 3
Pregunta 4 (0,5 puntos).- Dadas las siguientes clases:

publ i c cl ass Cl aseA {
pr i vat e i nt at r i but o1;
publ i c Cl aseA ( i nt a) {
at r i but o1=a; }
publ i c Cl aseA( )
{t hi s( 0) ; }
publ i c St r i ng t oSt r i ng ( ) {
r et ur n " obj et o A " +at r i but o1;
}
}
publ i c cl ass Cl aseB ext ends Cl aseA{
publ i c Cl aseB ( i nt a) {
super ( a) ; }
publ i c Cl aseB( ) {}
publ i c St r i ng t oSt r i ng( ) {
r et ur n " obj et o B " +super . t oSt r i ng( ) ;
}
}
publ i c cl ass Cl aseC ext ends Cl aseA{
publ i c Cl aseC ( i nt a) {
super ( a) ; }
publ i c Cl aseC ( ) {
super ( ) ;
}
}

Y el mtodo:
publ i c st at i c voi d met odo1( Cl aseA obj et o1) {
Syst em. out . pr i nt l n( obj et o1. t oSt r i ng( ) ) ;
}

Explicar cul ser el resultado de las siguientes invocaciones:
Cl aseA obj et o1 = new Cl aseA( 1) ;
Cl aseB obj et o2 = new Cl aseB( 2) ;
Cl aseC obj et o3 = new Cl aseC( 3) ;

met odo1( obj et o1) ;
met odo1( obj et o2) ;
met odo1( obj et o3) ;

El mtodo1 recibe como parmetro un objeto de la Cl aseA, pero gracias al
polimorfismo es compatible con objetos de la Cl aseB y Cl aseC ya que ambas
heredan de A. El mtodo llama al t oSt r i ng( ) del objeto y lo imprime por
pantalla.
En la primera llamada invocamos al mtodo con un objeto de la Cl aseA, por lo que
se llama al t oSt r i ng( ) y se imprime obj et oA 1
En la segunda llamada lo invocamos con un objeto de la Cl aseB (que gracias al
polimorfismo es tambin un objeto de la Cl aseA) y se llama otra vez al mtodo
t oSt r i ng( ) . Pero como el objeto es realmente de la Cl aseB y ha sobrescrito el
mtodo, es al nuevo mtodo al que se llama, por lo que se imprime obj et o B
obj et o A 2 (ya que el mtodo sobrescrito hace una llamada al del padre)
En el tercer caso, se llama al mtodo con un objeto de la Cl aseC. Como Cl aseC
no sobrescribe el mtodo t oSt r i ng( ) , utiliza el del padre, por lo que imprime
obj et o A 3

PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 4
Pregunta 5 (0,5 Puntos).- Dadas las siguientes clases:
publ i c cl ass Cl ase1 {
pr i vat e i nt at r 1;
pr i vat e St r i ng at r 2;

publ i c Cl ase1 ( i nt a, St r i ng b) {
at r 1=a;
at r 2=b;
}
publ i c Cl ase1( ) {
t hi s( - 1, " vac o" ) ;
}
}

publ i c cl ass Cl ase2 ext ends Cl ase1 {
bool ean at r 3;
}

Aadir los mtodos y constructores necesarios en Clase1 y Clase2 para que
el resultado por pantalla de ejecutar el siguiente cdigo:

Cl ase2 obj et o = new Cl ase2( 3, hol a, t r ue) ;
Syst em. out . pr i nt l n( obj et o. t oSt r i ng( ) ) ;

Sea:
At r i but o 1 = 3
At r i but o 2 = hol a
At r i but o 3 = t r ue

En primer lugar hay que crear un constructor para Cl ase2 que reciba valores para
los tres parmetros de esta clase (2 heredados y 1 nuevo). Un ejemplo sera:
publ i c Cl ase2 ( i nt a, St r i ng b, bool ean c) {
super ( a, b) ;
at r 3 = c;
}
Hay que usar super ( ) porque los atributos heredados se han definido como
privados y no tenemos acceso directo a ellos, hay que darles por lo tanto valor con
el constructor del padre.
Tambin sera conveniente incluir un constructor por defecto:
publ i c Cl ase2 ( ) {}
Ahora hay que hacer un mtodo t oSt r i ng. No se puede hacer que se imprima
todo directamente en Cl ase2, porque los atributos heredados son privados y no
podemos acceder a ellos. La opcin ms elegante es crear un mtodo t oSt r i ng
en Cl ase1:
publ i c St r i ng t oSt r i ng( ) {
r et ur n " At r i but o 1 = " +at r 1+' \ n' +" At r i but o 2 = " +at r 2+' \ n' }

Y luego sobrescribirlo en Cl ase2, llamando al padre:
publ i c St r i ng t oSt r i ng ( ) {
r et ur n super . t oSt r i ng( ) +" At r i but o 3 = " +at r 3; }
Tambin se podran aadir mtodos get At r 1 y get At r 2 en Cl ase1 y llamarlos
desde el t oSt r i ng de Cl ase2.
PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 5
Pegunta 6 (0,5 puntos).- Dado el siguiente cdigo java:

publ i c st at i c voi d met odo1( ) {
St r i ng [ ] pal abr as = new St r i ng[ 4] ;
pal abr as[ 1] = " pal abr a1" ;
pal abr as[ 2] = " pal abr a2" ;
pal abr as[ 3] = " pal abr a3" ;
t r y{
Syst em. out . pr i nt l n( " ant es del f or " ) ;
f or ( i nt i =1; i <pal abr as. l engt h; i ++) {
Syst em. out . pr i nt l n( pal abr as[ i %3] ) ;
}
Syst em. out . pr i nt l n( " despues del f or " ) ;
}cat ch ( Nul l Poi nt er Except i on npe) {
Syst em. out . pr i nt l n( " nul l poi nt er " ) ;
}cat ch ( Ar r ayI ndexOut Of BoundsExcept i on ai obe) {
Syst em. out . pr i nt l n( " ar r ay i ndex out " ) ;
}cat ch ( Except i on e) {
Syst em. out . pr i nt l n( " except i on " ) ;
}f i nal l y{
Syst em. out . pr i nt l n( " t odo bi en? " ) ;
}
}

Explicar cul sera la salida por pantalla al invocar dicho mtodo.

Tras inicializar la variable palabras, entraramos en el try. Lo primero que mostrara
sera antes del for . Dentro del for, el cual va de 1 a 3 inclusive, mostraramos
consecutivamente el valor de palabras[1], palabras[2] y palabras[0], lo que se
corresponde con palabra1, palabra2 y null. Al salir del for se mostrara despues
del for y como no se ha lanzado ninguna excepcin (imprimir null no produce
excepciones) , slo quedara mostrar todo bien? del apartado finally.
El resultado por pantalla es por lo tanto:

antes del for
palabra1
palabra2
null
despues del for
todo bien?





PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 6
Pregunta 7 (0,5 puntos).- Dado el siguiente cdigo java:
publ i c st at i c voi d l eer ( St r i ng nombr e) {
St r i ng l i nea;
i nt x = 0;
i nt y = 0;
t r y {
Fi l eReader f r = new Fi l eReader ( nombr e) ;
Buf f er edReader br = new Buf f er edReader ( f r ) ;
l i nea = br . r eadLi ne( ) ;
x = I nt eger . par seI nt ( l i nea) ;
f or ( i nt i =0; i <= x; i ++) {
l i nea = br . r eadLi ne( ) ;
Syst em. out . pr i nt l n( y+=I nt eger . par seI nt ( l i nea) ) ;
}
Syst em. out . pr i nt l n( l ei do) ;
br . cl ose( ) ;
}cat ch ( Number For mat Except i on e) {
Syst em. out . pr i nt l n( " Number For mat Except i on" ) ;
}cat ch ( I OExcept i on e) {
Syst em. out . pr i nt l n( " Except i on" ) ;
}f i nal l y {
Syst em. out . pr i nt l n( " y = " +y) ;
}
Syst em. out . pr i nt l n( " adi os" ) ;
}
Y siendo el contenido del fichero prueba.txt el siguiente:
4
0
6
1
3
hol a
5

Explicar cul sera la salida por pantalla al invocar leer(prueba.txt)

Se toma el primer entero del fichero y se leen siguientes (4+1) lneas. Lee y
muestra una a una (0, 6, 7, 10) hasta el hola que no puede pasar a entero
por lo que lanza una excepcin. La excepcin es de tipo NumberFormatException
por lo que se muestra por pantalla Number Format Exception, seguido por el
mensaje que aparece en finally: y =10. Por ltimo se muestra el adios.

0
6
7
10
Number Format Exception
y =10
adios


PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 7

Pregunta 8 (0,5 puntos).- Dado las siguientes clases J ava:
publ i c abst r act cl ass Cl aseUno {
publ i c i nt at r 1;
pr i vat e i nt at r 2;
publ i c Cl aseUno ( i nt a, i nt b) {
at r 1= a;
at r 2= b;
}
publ i c Cl aseUno ( ) {}
/ / mt odo que suma l os dos at r i but os
publ i c abst r act i nt suma( ) ;
/ / mt odo que r est a l os dos at r i but os
publ i c abst r act i nt r est a( ) ;
}

publ i c abst r act cl ass Cl aseDos {
publ i c abst r act i nt mul t i pl i ca ( ) ;
publ i c abst r act i nt di vi de ( ) ;
}
a) En qu deberamos convertir ClaseDos para que fuera posible que otra
clase denominada ClaseTres, heredara los mtodos de ClaseUno y
ClaseDos (sin que ClaseDos sea hija de ClaseUno o viceversa)
b) Escriba la cabecera de ClaseTres una vez hecho este cambio.
c) Qu se debera hacer en ClaseTres para que se puedan crear objetos de
dicha clase?

a) Cl aseDos no puede ser una Clase, porque en J ava no se permite la herencia
mltiple, sino que tiene que ser una interfaz. De este modo su cabecera
quedara:
publ i c i nt er f ace Cl aseDos( ) {}

b) La cabecera de Cl aseTr es, una vez convertida Cl aseDos en una interfaz
sera:

publ i c abst r act Cl aseTr es ext ends Cl aseUno i mpl ement s
Cl aseDos

c) Cl aseTr es al heredar mtodos abstractos de Cl aseUno e implementar la
interfaz Cl aseDos, que tambin tiene mtodos abstractos, debe implementar
esos mtodos o declararse como abstracta (tal y como se muestra en la
cabecera de b). Como no se pueden crear objetos de una clase abstracta, la
nica solucin sera implementar los 4 mtodos heredados. Tambin sera
conveniente, aunque no obligatorio, crear constructores para la Cl aseTr es..
PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 8
d)
EXAMEN PROGRAMACIN
15 de Junio de 2007
INGENIERA INFORMTICA
Segunda parte: problemas
2,5 horas
Se pretende construir un programa que sirva para gestionar una biblioteca. Para ello, a lo
largo de tres problemas se crearn las clases necesarias para representar los libros y la
biblioteca, ordenarlos, buscarlos, guardarlos en un archivo y restaurarlos.

Problema 1 (2 puntos)
En este problema se implementar la clase Li br o. Para ello, se pide lo siguiente:
a) (0,75 puntos) Crear una clase Li br o para representar cualquier libro existente en la
biblioteca. La clase debe cumplir las siguientes caractersticas:
Pertenecer al paquete examenj uni o.
Dar la posibilidad (sin implementarla) de que se puedan serializar objetos de
esta clase.
Tener los siguientes atributos, que no deben ser accesibles por ninguna otra
clase:
t i t ul o: Indica el ttulo del libro
descr i pci on: Contiene una breve descripcin del libro
pr est ado: Indica si el libro actualmente se encuentra prestado o est
disponible en la biblioteca.
Tener un atributo visible por todas las clases llamado t i poDeLi br o, que
contiene un nmero indicativo del tipo del libro. Los posibles tipos para un
libro estarn definidos como constantes pblicas comunes para todos los
objetos de la clase, y son los siguientes:
TI PO_NOVELA: Valor 1
TI PO_RELATOS: Valor 2
TI PO_POESI A: Valor 3
Tener un atributo visible por cualquier otra clase y comn a todos los objetos
Li br o, denominado cont ador , que cuente cuantos libros se han creado.
Tener un atributo visible por cualquier otra clase llamado i dent i f i cador ,
que es un nmero nico para cada libro. Al crear un libro se le asignar un
identificador consecutivo partiendo del nmero 100 (el primer libro que se
cree tendr el nmero 100, el siguiente el 101, y as sucesivamente).
b) (0,75 puntos) Crear los siguientes mtodos de la clase Libro
Crear un constructor que reciba como parmetros el ttulo, la descripcin y el
tipo del libro. Al crearse un libro nuevo no se encuentra prestado.
Crear un constructor (que ser utilizado para los libros de poesa), que utilice
el constructor anterior y que slo reciba el ttulo y la descripcin del libro.
Crear mtodos que devuelvan el valor de los atributos t i t ul o,
descr i pci n, y pr est ado.
Crear un mtodo que permita modificar el valor del atributo pr est ado,
recibiendo como parmetro el nuevo valor.
c) (0,25 puntos) Crear una interfaz llamada Or denabl e, con las siguientes
caractersticas:
Pertenecer al paquete examenj uni o.
Tener un mtodo pblico denominado get Or den que no recibir parmetros
y devolver un nmero.
d) (0,25 puntos) Realizar las modificaciones necesarias a la clase Li br o para que
cumpla la interfaz Or denabl e. El orden de un libro ser igual a su identificador.
PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 9
Problema 2 (2,5 puntos)
Aunque este problema es continuacin lgica del primer problema, es posible realizarlo sin
haber hecho el problema anterior.
a) (1 puntos) Crear una clase denominada Bi bl i ot eca, que cumpla las siguientes
caractersticas.
Pertenecer al paquete examenj uni o.
Tener un atributo denominado l i st aLi br os que contendr un array de
objetos Li br o representando los libros de la biblioteca.
Tener un constructor que recibe como parmetro la lista de libros inicial de la
biblioteca.
Tener un mtodo aadirLi bro que recibe como parmetro un libro, y lo aade
al final de la lista de libros actuales.
b) (0,5 puntos) Modificar la clase Bi bl i ot eca para incluir un mtodo denominado
or denar Li br os que ordenar utilizando el mtodo de seleccin directa la lista de
libros contenida en el atributo l i st aLi br os segn el valor devuelto por su mtodo
get Or den. Si no se ha hecho el problema anterior, asumir que en la clase Li br o
existe un mtodo llamado get Or den que no recibe parmetros y devuelve un
nmero por el que ordenar los libros.
c) (0,75 puntos) Dado el siguiente mtodo de la clase Bi bl i ot eca:
publ i c Li br o busquedaBi nar i a( i nt i d) {
r et ur n busquedaBi nar i aRecur si va( i d, 0, l i st aLi br os. l engt h- 1) ;
}
Asumiendo que la lista de libros est ordenada por su identificador, modificar la
clase Bi bl i ot eca para implementar el mtodo denominado
busquedaBi nar i aRecur si va que permite buscar un libro dado su identificador,
segn el mtodo de bsqueda binaria. Es necesario que este mtodo sea
implementado de manera recursiva.
d) (0,25 puntos) Modificar la clase Bi bl i ot eca para incluir un mtodo pblico
denominado est aPr est ado. Dicho mtodo recibir como parmetro un
identificador de libro, y devolver t r ue si el libro se encuentra prestado, o f al se si
el libro no se encuentra prestado o no pertenece a la biblioteca. Para buscar el libro
se utilizar el mtodo busquedaBi nar i a del apartado anterior.

Problema 3 (1,5 puntos)

Aunque este problema es continuacin lgica del primer problema, es posible realizarlo sin
haber hecho el problema anterior.
a) (0,5 puntos) Modificar la clase Bi bl i ot eca para incluir un mtodo guar dar Li br os
que reciba como parmetro el nombre de un fichero, y escriba la lista de libros de la
biblioteca a dicho fichero (serializndola). El mtodo deber gestionar las posibles
excepciones que se produzcan.
b) (1 puntos) Modificar la clase Biblioteca para incluir un mtodo l eer Li br os que
reciba como parmetro el nombre de un fichero y lea la lista de libros de la
biblioteca de dicho fichero. Asegurarse de que una vez leda la lista de libros del
fichero, si quisisemos crear nuevos libros stos tomaran los valores consecutivos
correctos para su campo i dent i f i cador (Ej: Si el mayor de los identificadores de
los libros ledos del fichero es el 154, el siguiente libro que se crear tendr el
identificador 155. La lista de libros no tiene por qu estar ordenada). El mtodo
deber gestionar las posibles excepciones que se produzcan.
Si no se ha hecho el problema anterior, asumir que en la clase Bi bl i ot eca existe un
atributo denominado l i st aLi br os que contiene un array de objetos Li br o, que los libros
tienen un atributo entero denominado i dent i f i cador y otro que lleva la cuenta de libros
creados, denominado cont ador , y existe el mtodo or denar Li br os creado en el
apartado b) del problema anterior.
Problema 1
PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 10

Clase Libro

package examenj uni o;
i mpor t j ava. i o. *;
publ i c cl ass Li br o i mpl ement s Ser i al i zabl e, Or denabl e {
pr i vat e St r i ng t i t ul o, descr i pci on;
pr i vat e bool ean pr est ado;
publ i c i nt t i poDeLi br o;
publ i c st at i c f i nal i nt TI PO_NOVELA = 1, TI PO_RELATOS=2,
TI PO_POESI A = 3;
publ i c i nt i dent i f i cador ;
publ i c st at i c i nt cont ador ;

publ i c Li br o ( St r i ng t , St r i ng d, i nt t i po) {
t i t ul o= t ;
descr i pci on = d;
pr est ado = f al se; / / no hace f al t a, es el val or por
def ect o
t i poDeLi br o = t i po;
i dent i f i cador = i d+100;
i d++;
}

publ i c Li br o ( St r i ng t , St r i ng d) {
t hi s( t , d, TI PO_POESI A) ;
}

publ i c St r i ng get Ti t ul o ( ) {
r et ur n t i t ul o;
}
publ i c St r i ng get Descr i pci on ( ) {
r et ur n descr i pci on;
}
publ i c bool ean get Pr est ado ( ) {
r et ur n pr est ado;
}
publ i c voi d set Pr est ado ( bool ean p) {
pr est ado=p;
}

publ i c i nt get Or den ( ) {
r et ur n i dent i f i cador ;
}

}

Interfaz Ordenable

package examenj uni o;

publ i c i nt er f ace Or denabl e {
publ i c abst r act i nt get Or den( ) ;
}


PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 11
Problema 2
package examenj uni o;
i mpor t j ava. i o. *;
publ i c cl ass Bi bl i ot eca {
pr i vat e Li br o l i st aLi br os [ ] ;

publ i c Bi bl i ot eca ( Li br o [ ] l i st a) {
l i st aLi br os = l i st a;
}

publ i c voi d aadi r Li br o ( Li br o l ) {
Li br o [ ] aux = new Li br o [ l i st aLi br os. l engt h+1] ;
f or ( i nt i =0; i <l i st aLi br os. l engt h; i ++) {
aux[ i ] =l i st aLi br os[ i ] ;
}
aux[ l i st aLi br os. l engt h] =l ;
l i st aLi br os = aux;
}

publ i c voi d or denar Li br os ( ) {
/ / def i ni mos l as var i abl es auxi l i ar es
i nt posi ci onMenor ;
Li br o val or Menor ;
i nt ul t i mo = l i st aLi br os. l engt h- 1;
/ / buscamos sucesi vament e el menor el ement o de l a l i st a
f or ( i nt i =0; i <=ul t i mo; i ++) {
/ / el menor empi eza si endo el val or de l a posi ci n i
posi ci onMenor =i ;
val or Menor =l i st aLi br os[ i ] ;
/ / Buscamos el menor de l os r est ant es r ecor r i endo l a
/ / l i st a con el ndi ce j
f or ( i nt j =i +1; j <=ul t i mo; j ++) {
/ / Si el el ement o l i st a[ j ] es menor que el
/ / val or Menor , pasa a ser el val or Menor
i f
( l i st aLi br os[ j ] . get Or den( ) <val or Menor . get Or den( ) ) {
val or Menor =l i st aLi br os[ j ] ;
posi ci onMenor =j ;
}/ / f i n i f
}/ / f i n f or ( j )
/ / i nt er cambi amos el menor por el de l a posi ci n i
l i st aLi br os[ posi ci onMenor ] =l i st aLi br os[ i ] ;
l i st aLi br os[ i ] =val or Menor ;
/ / y segui mos con el bucl e
} / / f i n f or ( i )
}
publ i c Li br o busquedaBi nar i a( i nt i dent i f i cador ) {
r et ur n busquedaBi nar i aRecur si va( i dent i f i cador , 0,
l i st aLi br os. l engt h- 1) ; }

PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 12
publ i c Li br o busquedaBi nar i aRecur si va( i nt i d, i nt pr i m, i nt
ul t ) {
i nt cent r al = ( pr i m+ul t ) / 2;
i f ( pr i mer o>ul t i mo) r et ur n nul l ;
i f ( i d==l i st aLi br os[ cent r al ] . get Or den( ) ) r et ur n
l i st aLi br os[ cent r al ] ;
el se i f ( i d>l i st aLi br os[ cent r al ] . get Or den( ) )
busquedaBi nar i aRecur si va( i d, cent r al +1, ul t ) ;
el se r et ur n busquedaBi nar i aRecur si va( i d, pr i m, cent r al - 1) ;
r et ur n nul l ;
}

publ i c bool ean est aPr est ado ( i nt i d) {
Li br o aux =busquedaBi nar i a( i d) ;
i f ( aux==nul l ) r et ur n f al se;
r et ur n aux. get Pr est ado( ) ;
}

Problema 3

publ i c voi d guar dar Li br os( St r i ng nombr eFi cher o) t hr ows Except i on {
Obj ect Out put St r eamoos = nul l ;
Fi l eOut put St r eamf os = nul l ;
t r y {
f os = new Fi l eOut put St r eam( nombr eFi cher o) ;
oos = new Obj ect Out put St r eam( f os) ;
oos. wr i t eObj ect ( l i st aLi br os) ;
} cat ch( Except i on e) {
Syst em. out . pr i nt l n( " Excepci n i nt ent ando guar dar l i br os" ) ;
} f i nal l y {
i f ( f os ! = nul l ) {
f os. cl ose( ) ;
}
}
}

publ i c voi d car gar Li br os( St r i ng nombr eFi cher o) {
Obj ect I nput St r eamoi s = nul l ;
Fi l eI nput St r eamf i s = nul l ;
t r y {
f i s = new Fi l eI nput St r eam( nombr eFi cher o) ;
oi s = new Obj ect I nput St r eam( f i s) ;
l i st aLi br os = ( Li br o[ ] ) oi s. r eadObj ect ( ) ;
/ / Recor r e l a l i st a de l i br os par a buscar el l t i mo
i dent i f i cador
i nt max = 0;
f or ( i nt i =0; i <l i st aLi br os. l engt h; i ++) {
i f ( l i st aLi br os[ i ] . i dent i f i cador > max) {
max = l i st aLi br os[ i ] . i dent i f i cador ;
PROGRAMACIN. INGENIERA INFORMTICA J unio de 2007
Pag. 13
}
}
Li br o. cont ador = max 99;
} cat ch( I OExcept i on i oe) {
Syst em. out . pr i nt l n( " Excepci n i nt ent ando r est aur ar
l i br os" ) ;
} cat ch( Cl assNot FoundExcept i on e) {
Syst em. out . pr i nt l n( " Excepci n i nt ent ando r est aur ar
l i br os" ) ;
} f i nal l y {
i f ( f i s ! = nul l ) {
f i s. cl ose( ) ;
}
}
}

You might also like