Ejercicios 5 Java 1
Ejercicios 5 Java 1
1. ¿Cómo es posible crear objetos de una clase cuyos constructores son todos privados?
a) Definiendo un método estático público en la clase que cree un objeto de la clase y lo devuelva.
b) Definiendo una subclase y declarando públicos los constructores heredados.
c) Definiendo una superclase con constructores públicos.
d) No es posible.
class A {
static int n = 0;
String f (A x) { return "AA" + (x.n++); }
String f (B x) { return "AB" + (x.n--); }
}
class B extends A {
String f (B x) { return "BB" + (x.n--); }
public static void main (String args[]) {
A a = new A ();
A b = new B ();
System.out.println (a.f (b));
System.out.println (b.f (b));
System.out.println (a.f ((B) b));
System.out.println (b.f ((B) b));
}
}
Salida:
AA0
AA1
AB2
BB1
6. El siguiente método ordena una lista de números decimales por el método de la burbuja:
static void ordenar (double lista[]) { 1
for (int i = 0; i < lista.length; i++) 2
for (int j = lista.length-1; j > i; j--) 3
if (lista[j] < lista[j-1]) intercambiar (lista, j, j-1); 4
}
a) Generalizar la función ordenar para que ordene listas de cualquier tipo de datos sobre los que tenga
sentido definir una relación de orden. Para ello, introducir una mínima modificación en las líneas 1 y 4,
y definir las clases y/o interfaces adicionales que sean necesarias.
b) Basándose en el diseño del apartado anterior, definir las clases Rectangulo, Circulo y Figura, de tal
manera que sea posible ordenar listas de figuras por su área. Definir en estas clases todos los métodos y
variables necesarios para ello, siempre al nivel más alto posible de la jerarquía de clases.
Nota: para simplificar, se permite suponer que los lados de un Rectangulo son paralelos a los ejes de
coordenadas.
7. a) Definir una clase Conjunto que contenga:
− Un array de valores de cualquier tipo.
− Un método interseccion que tome como argumento otro conjunto, y devuelva un nuevo
conjunto con la intersección de los dos, es decir, los elementos de la primera lista que son equal a
algún elemento de la segunda.
b) Definir una clase Persona con una variable RUT y los métodos necesarios para que se pueda hacer la
intersección de listas de personas con la clase anterior, considerando que dos personas son la misma
cuando tienen el mismo RUT.
c) Definir un método elements en la clase Conjunto que devuelva una Enumeration para iterar sobre un
conjunto. Indicación: Enumeration es una interface con dos métodos: nextElement y hasMoreElements.
class A {
public static void main (String args[]) throws X {
try { f (); throw new Z (); }
catch (Y ex) { System.out.println (“Y” + ex); }
catch (X ex) { System.out.println (“X” + ex); }
}
static f () throws X {
try { throw new Y (); } catch (X ex) { g (); }
}
static g () throws X {
try { throw new X (); } catch (Y ex) {}
}
}
class Y extends X {
public String toString () { return "Y"; }
}
class Z extends Y {
public String toString () { return "Z"; }
}
Añadir a la clase Contador los métodos detener, reanudar, reiniciar y terminar que hagan
respectivamente que la cuenta hacia delante se detenga, se reanude donde se detuvo, vuelva a 0 (esté o no
detenida), y termine definitivamente. Indicación: no utilizar métodos como interrupt, suspend, resume,
stop, etc., heredados de la clase Thread.