septiembre 2007 - resuelto
TRANSCRIPT
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 1/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 1
Apell idos Nombre
Firma NIA Grupo
Pregunta 1 (0,5 puntos).- Indicar si las siguientes afirmaciones son ciertas, y explicar brevemente por qué.
a) Al crear objetos de una clase abstracta, sólo podremos usar los métodos que no seanabstractos.
Falso, no pueden crearse objetos de una clase abstracta, por tanto no pueden invocarsemétodos sobre estos objetos.
b) Una clase derivada sólo puede acceder a un método privado de la superclase si y sólosi ambas pertenecen al mismo paquete.
Falso, una clase derivada no puede acceder a los métodos privados de la superclase, sólola misma clase tiene acceso a sus métodos privados.
EXAMEN PROGRAMACIÓN21 de Septiembre de 2007
INGENIERÍA INFORMÁTICAPrimera parte: Cuestiones
1,5 horas
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 2/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 2
Pregunta 2 (0,5 puntos).- Indicar si las siguientes afirmaciones son ciertas, y explicar brevemente por qué.
a) Al igual que es posible que distintas clases implementen una única interfaz, una únicaclase puede implementar dos o más interfaces.
Verdadero, una clase puede implementar varias interfaces. Lo que no puede hacer esheredar a la vez de más de una superclase (no está permitida la herencia múltiple).
b) Para implementar una interfaz, la clase debe proporcionar la implementación de almenos un método definido en la interfaz.
Falso, para implementar una interfaz la clase debe proporcionar la implementación deTODOS los métodos de la interfaz.
Pregunta 3 (0,5 puntos).- Dada la siguiente lista: (21, 5, 34, 6, 17, 11). Escribir cómoevolucionaría dicha lista hasta quedar completamente ordenada mediante el métodoRápido (QuickSort)
Lista parcial: (21, 5, 34, 6, 17, 11), Pivote: 34. Intercambios: 11 con 34
(21, 5, 11, 6, 17, 34)
Lista parcial: (21, 5, 11, 6, 17), Pivote: 11. Intercambios: 21 con 6
(6, 5, 11, 21, 17, 34)
Lista parcial: (6, 5), Pivote: 6. Intercambios: 6 con 5
(5, 6, 11, 21, 17, 34)
Lista parcial: (21, 17), Pivote: 21. Intercambios: 21 con 17
(5, 6, 11, 17, 21, 34)
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 3/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 3
Pregunta 4 (0,5 puntos).- Dado el siguiente método:
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;try {
Buf f eredReader br = new Buf f eredReader ( newFi l eReader ( nombr e) ) ;
l i nea = br . r eadLi ne( ) ;whi l e ( l i nea==nul l ) {
l i nea = br . r eadLi ne( ) ;Syst em. out . pr i nt l n( l i nea) ;
}Syst em. out . pr i nt l n( “l ei do”) ;br . cl ose( ) ;
}cat ch ( I OExcept i on e) {Syst em. out . pr i nt l n( "Except i on") ;
}f i nal l y {System. out . pr i nt l n( "- - - ") ;
}Syst em. out . pr i nt l n( "adi os") ;
}
Y el fichero prueba.txt con el siguiente contenido:a bcde fgh
Explicar qué sale por pantalla al invocar l eer ( “pr ueba. t xt ”) . Modificar el métodol eer para que imprima sólo las líneas impares.
Salida por pantalla:leido---adios
Esto es debido a que nunca se entra por el bucle whi l e, ya que al leer la primera línea
del fichero con r eadLi ne( ) la variable l i nea no vale nul l .
Para modificarlo para leer las líneas pares, habría que sustituir el bloque de dentro del
try por el siguiente código:Buf f eredReader br = new Buf f eredReader ( new
Fi l eReader ( nombr e) ) ;l i nea = br . r eadLi ne( ) ;whi l e ( l i nea != nul l ) {
l i nea = br . r eadLi ne( ) ;if(x % 2 == 0) {
System.out.println(linea);
}
x++;
}Syst em. out . pr i nt l n( “l ei do”) ;
br . cl ose( ) ;
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 4/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 4
Pregunta 5 (0,5 Puntos).- Dadas las siguientes clases e interfaces:
publ i c abst r act cl ass Pr i mer Pl at o {publ i c voi d Pedi r Agua( ) {
Syst em. out . pr i nt l n( " Agua, por f avor . . . ") ;}publ i c voi d Pedi r Pan( ) {
Syst em. out . pr i nt l n( " Pan, por f avor . . . ") ;}}
publ i c abst r act cl ass SegundoPl at o {publ i c abst r act voi d Pedi r Vi no( ) ;
}
publ i c i nt er f ace Post r e {publ i c voi d Pedi r Dul ce( ) ;publ i c voi d Pedi r Amar go( ) ;
}
Implementar, si es posible, la clase MenuDel Di a de tal forma que herede los métodosde Pr i mer Pl at o y SegundoPl at o, e implemente a su vez todos los métodos
contenidos en la clase Postre. Si no es posible, explicar por qué, y modificar el códigode tal forma que permita crear dicha clase MenuDel Di a.
No es posible, ya que en java una clase no puede heredar a la vez de dos superclases(no es posible la herencia múltiple), por tanto no puede heredar a la vez de la clasePr i mer Pl at o y SegundoPl at o.
Para modificar el código para permitir crear dicha clase, podemos cambiar la clase
SegundoPl at o por una interfaz:
publ i c i nt er f ace SegundoPl at o {publ i c voi d Pedi r Vi no( ) ;
}
Así, podemos hacer que nuestra clase herede de la clase Pr i mer Pl at o, e implemente
las dos interfaces:
publ i c cl ass MenuDel Di a ext ends Pr i merPl ato i mpl ement s SegundoPl ato,Post r e{
publ i c voi d Pedi r Vi no( ) {
System. out . pr i nt l n( " Vi no, por f avor . . . ") ;}publ i c voi d Pedi r Dul ce( ) {
Syst em. out . pr i nt l n( " Dul ce, por f avor . . . ") ;}publ i c voi d Pedi r Amar go( ) {
Syst em. out . pr i nt l n( " Amar go, por f avor . . . ") ;}
}
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 5/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 5
Pegunta 6 (0,5 puntos).- Dado el siguiente método:
publ i c st at i c i nt r ecurs i vo ( i nt [ ] vect or , i nt j ) {i f ( j > 0) {
i nt aux = 0;f or ( i nt i =0; i <j ; i ++) {
aux += vect or [ i ] ;}r et ur n aux - r ecur si vo( vect or , j - 1) + r ecur si vo( vect or ,
j - 2) ;}el se r et ur n 0;
}
Explicar cual sería el resultado por pantalla de la siguiente invocación:
i nt [ ] vector = {3, 5, - 2, 1};Syst em. out . pr i nt l n( r ecur si vo( vector, 3) ) ;
Resultado:
recursivo(3) = (3 + 5 – 2) – recursivo(2)+recursivo(1) = (3 + 5 – 2) – ((3 + 5) – recursivo(1) +recursivo(0))+recursivo(1)(3 + 5 – 2) – ((3 + 5) – 3 + 0)+36 – (8 – 3) + 34
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 6/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 6
Pregunta 7 (0,5 puntos).- Dadas las siguientes clases:publ i c cl ass Mami f er o {
pr i vat e St r i ng habi t at ;publ i c Mami f er o ( St r i ng h) {
habi t at =h;}publ i c Mami f er o( ) {
thi s( " ter r est r e" ) ;}publ i c St r i ng t i po ( ) {
r et ur n "mamí f er o "+habi t at ;}
}
publ i c cl ass Cetaceo ext ends Mami f er o{publ i c Cet aceo ( St r i ng h) {
super ( h) ;}
publ i c Cet aceo( ) {t hi s("acuát i co") ;}publ i c St r i ng t i po( ) {
r et ur n super . t i po( ) + " ( cet áceo) ";}
}
Y el método:
publ i c st at i c voi d i mpr i mi r Ti po( Mami f er o m) {
Syst em. out . pr i nt l n( m. t i po( ) ) ;}
Explicar cuál será el resultado por pantalla de la siguiente secuencia de invocaciones:
Mami f ero el ef ant e = new Mami f ero( ) ;Cet aceo del f i n = new Cet aceo( ) ;i mpr i mi r Ti po( el ef ant e) ;i mpr i mi r Ti po( del f i n) ;
mami f er o t er r est r emami f ero acuat i co ( cetáceo)
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 7/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 7
Pregunta 8 (0,5 puntos).- Dado el siguiente método:
publ i c st at i c voi d met odo1 ( ) {St r i ng [ ] MensCi f r ado = new St r i ng[ 11] ;MensCi f r ado[ 1] = "excepci ones";
MensCi f r ado[ 2] = "i nt er f aces";MensCi f r ado[ 3] = "de" ;MensCi f r ado[ 4] = "er r or " ;MensCi f r ado[ 5] = "ej empl o" ;MensCi f r ado[ 6] = "ot r o" ;MensCi f r ado[ 7] = "un" ;MensCi f r ado[ 8] = "es" ;MensCi f r ado[ 9] = "Aquel " ;MensCi f r ado[ 10] = "Est e" ;try{
Syst em. out . pr i nt l n( "El mensaj e ci f r ado es: ") ;f or ( i nt i =8; i <MensCi f r ado. l engt h; i =i - 2) {
Syst em. out . pr i nt l n( MensCi f r ado[ i - 1] ) ;}Syst em. out . pr i nt l n( "For your eyes onl y" ) ;}cat ch ( Nul l Poi nt er Except i on npe) {
System. 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( " arr 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( "Fi n del comuni cado" ) ;}
}
Explicar cual sería la salida por pantalla al invocar dicho método
Salida:El mensaje cifrado es:unejemplodeexcepciones
Aquí salta una excepción ArrayIndexOutOfBoundsException, ya que el valor de ies menor que cero.array index out
Fin del comunicado
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 8/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 8
EXAMEN PROGRAMACIÓN21 de Septiembre de 2007
INGENIERÍA INFORMÁTICASegunda parte: problemas
2,5 horas
Nos encontramos en algún momento entre los años 1.100 y 1.300 a.C. El rapto de Helena deEsparta por Paris de Troya ha desencadenado la guerra. Para vengar la afrenta, los príncipesgriegos se disponen a asaltar la ciudad de Troya. El objetivo de los problemas es crear loselementos que van a tomar parte en la batalla, incluyendo el famoso caballo de Troya.
Problema 1 (2 puntos)En este problema se crearán la clase Guerr ero y las clases derivadas Tr oyano y Gr i ego.
a) (0,1 punto) Crear la clase abstracta Guerr ero, que deberá poder serializarse. Deberá contar
con los siguientes atributos, no accesibles por ninguna otra clase:
• nombr e, de tipo St r i ng, que no podrá cambiar una vez le hemos dado valor.
• edad, f uer za, de tipo i nt .• her i do, muert o de tipo bool ean.
b) (0,1 punto) Crear dos métodos públicos, uno para acceder al atributo edad y otro para darle
valor. Suponer que existen métodos equivalentes para el resto de atributos.
c) (0,3 puntos) Crear dos métodos, accesibles solamente por sus clases derivadas, st at i c bool ean compr obarEdad ( i nt e) y st at i c bool ean compr obarFuerza ( i ntf ) que calculen si edad y f uer za están dentro de los siguientes rangos: edad entre 15 y
60 (ambos inclusive), f uer za entre 1 y 10 (ambos inclusive). Devolverán t rue si son
correctos y f al se en caso contrario.
d) (0,8 puntos) Crear tres constructores para la clase Guerr ero:
• El primero recibirá valores para todos los atributos, excepto her i do y muert o, queobviamente serán falsos. Deberá comprobar que los valores dados son válidos y encaso contrario poner como edad 25 y como f uer za 5.
• El segundo, que deberá utilizar el primero, no recibirá ningún valor y creará unguerrero cuyo nombr e sea guerreroX y edad y f uer za valgan 15 y 1
respectivamente.
• El tercero, recibirá un objeto de tipo Guerr ero y un nombr e y creará una copia del
guerrero pasado con el nuevo nombre.
e) (0,2 puntos) Crear el siguiente método público y abstracto:
• bool ean r et i r ar se ( )
f) (0,2 puntos) Crear la clase Tr oyano, que hereda de Guerr ero y que no tiene ningún nuevoatributo. Crear un constructor para esta clase que reciba el nombr e, edad y f uer za del
Tr oyano y utilice alguno de los constructores de la clase Guerr ero.
g) (0,3 puntos) Implementar los métodos necesarios para que la clase Tr oyano no sea
abstracta, teniendo en cuenta que:
• Los métodos devolverán t rue si se ha podido realizar la acción y f al se si no.
• Los troyanos no pueden retirarse.
h) (0,2 Puntos) Crear la clase Gr i ego, que hereda de Guerr ero y que no tiene ningún nuevo
atributo. Los métodos y constructores de esta clase serán similares a los de Tr oyano (no
hace falta repetirlos), salvo el método ret i rarse, ya que los griegos sí lo pueden hacer,
siempre que estén heridos y, evidentemente, no estén muertos. Implementar este método.
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 9/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 9
Clase Guerrero
import j ava. i o. * ;
public abstract class Guer r ero implements Ser i al i zabl e {
private final St r i ng nombr e;
private int edad, f uer za;
private boolean her i do, muer t o;
/ / Apar t ado b)
public int get Edad() {
return edad;
}
public void set Edad( int e){
edad = e;
}
/ / Est os se dan por supuest os, no hací a f al t a hacer l os.
public int get Fuer za( ) {
return f uer za;
}
public void set Fuerza(int f ){
f uer za = f ;
}
public St r i ng getNombre( ) {
return nombr e;
}
public boolean get Her i do ( ) {
return her i do;
}
public void setHer i do ( boolean h) {her i do = h;
}
public boolean get Muer t o ( ) {
return muert o;
}
public void set Muert o ( boolean m) {
muer t o = m;
}
/ / Apar t ado c)
protected static boolean compr obarEdad (int e){
return e>=15 && e<=60;
}
protected static boolean comprobarFuerza ( int f ){
return f >0 && f <=10;
}
/ / Const r uct or es, apar t ado d)
public Guer r er o ( St r i ng n, int e, int f ){
nombr e = n;
if ( comprobarEdad(e) ) edad=e;else edad=25;
if ( compr obar Fuer za( f ) ) f uer za=f ;
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 10/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 10
else f uer za= 5; }
public Guer r er o ( ) {
this ( "Guerr eroX" , 15, 1) ;
}
public Guer r er o (Guer r er o g, St r i ng n) {
nombr e = n;
edad = g. edad;f uer za = g. f uer za;
}
/ / Apar t ado e) public abstract boolean ret i rarse( ) ;
}
Clase Troyano
/ / Apar t ado f )
public class Troyano extends Guer r ero {
public Troyano ( St r i ng n, int e, int f ){
super ( n, e, f ) ;
}
/ / Apart ado g)
public boolean ret i r arse( ) {
Syst em. out. pr i nt l n( "No nos podemos r et i r ar " ) ;
return false;
}
}
Clase Griego public class Gr i ego extends Guer r ero {
/ / El const r uct or se daba por hecho public Gr i ego ( St r i ng n, int e, int f ){
super ( n, e, f ) ;}
/ / Apar t ado h) public boolean ret i r ar se( ) {
if ( get Her i do( ) && ! get Muer t o( ) ) return true;return false;
}
}
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 11/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 11
Problema 2 (4 puntos)Este problema creará la clase para representar al Caballo de Troya. Aunque es continuaciónlógica del anterior se puede realizar independientemente.
a) (0,2 puntos) Crear la clase Cabal l o que tendrá como atributos públicos:
•
capaci dad, de tipo i nt , representa el número de guerreros griegos que puedehaber dentro del caballo. No se podrá cambiar una vez le hemos dado valor.
• ocupaci on, de tipo i nt , representa el número actual de griegos en el caballo.
• ocupant es, array de objetos de la clase Guerr ero.
b) (0,8 puntos) Crear dos constructores para la clase Cabal l o:
• el primero recibirá un array de Guerr eros, deberá comprobar que todos los
ocupant es son Gr i egos, en caso contrario se creará un Cabal l o sin ocupant es
con capaci dad 100 (en caso positivo, suponer que la capaci dad es la del número
de Guerr eros que se ha pasado como parámetro)
• el segundo recibirá un único Guerr ero y la capaci dad. También deberá comprobar
que el Guerr ero es Gr i ego, en caso contrario se creará un Cabal l o sin
ocupant es.
c) (0,4 puntos) Crear el método voi d or denar ( ) que ordene descendentemente el array de
ocupant es según su f uer za utilizando el algoritmo de selección directa.
d) (0,4 puntos) Crear un método i nt buscar ( St r i ng nombr e) que busque por su nombr e
un guerrero dentro del array ocupant es ordenado según el método anterior y devuelva la
posición en que está ó -1 si no está.
e) (0,4 puntos) Definir la interfaz PuedeMont ar se que especifica que se puede montar en los
objetos de tipo Cabal l o. Tendrá dos métodos:
• i nt mont ar ( Guerr ero g) que monta un Guerr ero en el Cabal l o y devuelve
el número de ocupant es que hay actualmente ó -1 si el Cabal l o ya está lleno.
Deberá comprobar que sólo los gr i egos puedan montar en el Cabal l o (si seintenta montar un Tr oyano devolverá -2).
• void desmontar () que desmonta todos los Guerr eros del Cabal l o.
f) (0,9 puntos) Realizar los cambios oportunos en la clase Cabal l o para que implemente la
interfaz PuedeMont ar se.
g) (0,3 puntos) Crear un método voi d guar dar ( St r i ng f i cher o) que guarde en un
fichero los nombres de todos los Guerr eros montados en el Cabal l o.
h) (0,3 puntos) Crear un método St r i ng [ ] l eer ( Fi l e f i chero) que lea los nombres de
los Guerr eros guardados en un fichero y los devuelva en un array de St r i ng.
i) (0,3 puntos) Crear una clase Usuar i a, que en su método mai n cree un Tr oyano, unCabal l o y un Gr i ego, y monte al soldado Gr i ego en el Cabal l o.
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 12/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 12
Clase Caballo
import j ava. i o. * ;
public class Cabal l o implements PuedeMontar se / / Par a apar t ado f )
{
public final int capaci dad;
public int ocupaci on;
public Guer r er o [ ] ocupant es;
/ / Apar t ado b) const r uct or es
public Cabal l o ( Guer r er o [ ] g) {
/ / Comprobamos que t odos l os ocupant es son gr i egos
boolean corr ecto = true;
int cont ador = 0;
while ( cont ador<g. l engt h && cor r ecto){
cor r ect o = g[ cont ador] instanceof Gr i ego;
contador++;}
if (correcto) {
ocupant es = g;
capaci dad = ocupant es. l engt h;
ocupaci on = capaci dad;
}
else {
capaci dad = 100;
ocupaci on = 0;
ocupant es = new Guer r er o [ 0] ;
}}
public Cabal l o ( Guer r er o g, int c) {
if ( g instanceof Gr i ego){
capaci dad = c;
ocupaci on = 1;
ocupant es = new Guerr ero [ capaci dad] ;
ocupant es[ 0] =g;
}
else {
capaci dad = c;
ocupaci on = 0;
ocupant es = new Guerr ero [ capaci dad] ;
}
}
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 13/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 13
/ / Apar t ado c)
public void ordenar ( ) {
/ / def i ni mos l as var i abl es auxi l i ar es
int posi ci onMayor ;Guer r ero val orMayor ;
int ul t i mo = ocupant es. l engt h;
/ / buscamos sucesi vament e el mayor el ement o de l a l i st a
for ( int i =0; i <=ul t i mo; i ++) {
/ / el mayor empi eza si endo el val or de l a posi ci ón i
posi ci onMayor =i ;
val orMayor=ocupant es[ i ] ;
/ / Buscamos el mayor de l os r est ant es r ecor r i endo l a l i st a conel í ndi ce j
for ( int j =i +1; j <=ul t i mo; j ++) {
/ / Si el el ement o l i st a[ j ] es mayor que el val or Mayor , pasa aser el
/ / val or Mayor
if ( ocupant es[ j ] . get Fuer za( ) <val or Mayor . get Fuer za( ) ) {
val orMayor=ocupant es[ j ] ;
posi ci onMayor =j ;
}/ / f i n i f
}/ / f i n f or ( j )
/ / una vez encont r ado el mayor l o i nt ercambi amos por el de l aposi ci ón i
ocupant es[ posi ci onMayor ] =ocupant es[ i ] ;
ocupant es[ i ] =val or Mayor ;/ / y segui mos con el bucl e
} / / f i n f or ( i )
}/ / f i n sel ecci onDi rect a
/ / Apart ado d) No val e l a búsqueda bi nar i a por que el ar r ay est á or denado
/ / por f uer za y no por nombre, usamos búsqueda secuenci al
public int buscar ( St r i ng nombr e){
/ / def i ni mos l as var i abl es auxi l i ar es
boolean encontr ado = false;
int cont ador = 0, r esul t ado = - 1;
/ / mi ent r as nos queden el ement os en l a l i st a y no hayamosencont r ado el que buscamos
while ( cont ador <= ocupant es. l engt h && ! encont r ado) {
if ( ocupant es[ cont ador] . get Nombr e( ) . equal s( nombr e) ) {
r esul t ado=cont ador;
encontr ado = true;
}/ / f i n i f
contador++;
}/ / f i n whi l e
return r esul t ado;
}
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 14/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 14
/ / Apar t ado f )
public int mont ar ( Guer r ero g){
/ / Si est á l l eno devuel ve - 1 if ( ocupant es. l engt h == ocupaci on) return - 1 ;
/ / Si no es gr i ego devuel ve - 2;
if ( ! (g instanceof Gr i ego) ) return - 2 ;
/ / Si no, busca el pr i mer hueco l i br e ( ser á un nul l )
int cont ador=0;
boolean mont ado = false;
while ( cont ador <ocupant es. l engt h && ! mont ado) {
if ( ocupant es[ cont ador] ==null) {
ocupant es[ cont ador ] = g;
mont ado = true;
}contador++;
}
ocupaci on++;
return ocupaci on;
}
public void desmont ar ( ) {
/ / Pone t odos a nul l
for ( int i =0; i <ocupaci on; i ++)
ocupant es[ i ] =null;
ocupaci on = 0;}
/ / Apar t ado g)
public void guar dar ( St r i ng f i cher o) {
try {
Pr i nt Wr i t er pw = new Pr i nt Wr i t er ( f i cher o) ;
/ / Par a saber cuant os hay escri t os en el f i cher o
pw. pr i nt l n( ocupaci on) ;
for ( int i =0; i <ocupaci on; i ++)
pw. pr i nt l n( ocupant es[ i ] . get Nombr e( ) ) ;
pw. cl ose( ) ;
}catch ( Fi l eNot FoundExcept i on f ) {
Syst em. out. pr i nt l n ( "No se ha podi do escr i bi r en elf i cher o") ;
}
}
7/23/2019 Septiembre 2007 - resuelto
http://slidepdf.com/reader/full/septiembre-2007-resuelto 15/15
PROGRAMACIÓN. INGENIERÍA INFORMÁTICA Septiembre de 2007
Pag. 15
/ / Apar t ado h)
public St r i ng [ ] l eer ( Fi l e f i chero){St r i ng [ ] r esul t ado=null;
try {
Buf f eredReader br = new Buf f eredReader ( new Fi l eReader( f i chero) ) ;
int t mp = I nteger . parseInt( br. readLi ne( ) ) ;
r esul t ado = new St r i ng [ t mp] ;
for ( int i =0; i <t mp; i ++)
r esul t ado[ i ] = br . r eadLi ne( ) ;
br . cl ose( ) ;
}
catch ( Fi l eNot FoundExcept i on e) {Syst em. out. pr i nt l n( "No se encuent r a el f i cher o "+f i cher o) ;
}
catch ( I OExcept i on e) {
Syst em. out. pr i nt l n( "Er r or con el f i cher o") ;
}
return r esul t ado;
}
Interfaz PuedeMontarse
public interface PuedeMontar se {
int mont ar ( Guerr er o g) ;
void desmont ar ( ) ;
}
Clase Usuaria
public class Usuar i a {
public static void mai n( St r i ng[ ] ar gs) {
Tr oyano t r oyano1 = new Tr oyano( "Par i s", 20, 10) ;
Gr i ego gr i ego1 = new Gr i ego ( "Ul i ses", 25, 10) ;
Cabal l o cabal l oDeTr oya = new Cabal l o ( gr i ego1, 100) ;
}
}