Hola lorenzo!
Le has metido bastante dedicación a este código (se nota!) bien por eso! bueno, como buen compañero del foro te señalo algunos detalles a continuación:
1. En tus interface tienes esto:
abstract public double getSuperficieEdificio();
abstract public String getTipoInstalacion();
¿Sabias tu que todo método declarado en una interface es
abstracto y
publico por defecto? No necesitas escribir abstract ni public. Si lo escribo así:
double getSuperficieEdificio(); java lo tomara por defecto abstracto y publico.
2. En tu clase GestorDeDatos, veo esto:
String cadena = "";
do{
Scanner escaner = new Scanner(System.in);
cadena = escaner.nextLine();
escaner.close();
}while(cadena == "");
return cadena;
A estas alturas en el curso se pudo ver que
String es una clase y no es posible comparar contenidos de objetos Strings con el operador
==. Aqui era usar un equals...
3. Tenias lo siguiente:
private ArrayList <Edificicacion> lista; y tambien
Iterator iter = lista.iterator();En este metodo:
public void addEdificacion(Edificacion edificacion){ lista.add(edificacion); }En el switch de la clase test:
switch(numeroMenu){
case 1: Polideportivo poli1 = new Polideportivo(entrada1.recogerNombre(),entrada1.recogerTipoPolideportivo(),entrada1.recogerSuperficie() );
lista1.addEdificacion(poli1);
break;
case 2: EdificioOficinas edi1 = new EdificioOficinas(entrada1.recogerSuperficie(),entrada1.recogerNumeroOficinas() );
lista1.addEdificacion(edi1);
break;
case 3: lista1.listarEdificaciones(); break;
case 4: System.out.println("....... Final del programa" ); break; Lo correcto era declarar el metodo, objetos, ArrayList y el Iterator de la siguiente manera para sacarle provecho al polimorfismo:
private ArrayList <Edificio> lista; y tambien
Iterator <Edificio> iter = lista.iterator();Método: public void addEdificacion(
Edificio edificacion){ lista.add(edificacion); }
switch(numeroMenu){
case 1:
Edificio poli1 = new Polideportivo(entrada1.recogerNombre(),entrada1.recogerTipoPolideportivo(),entrada1.recogerSuperficie() );
lista1.addEdificacion(poli1);
break;
case 2:
Edificio edi1 = new EdificioOficinas(entrada1.recogerSuperficie(),entrada1.recogerNumeroOficinas() );
lista1.addEdificacion(edi1);
break;
case 3: lista1.listarEdificaciones(); break;
case 4: System.out.println("....... Final del programa" ); break;
4. Por ultimo, vi que usastes un try-catch... esto lo vi en la universidad una vez cuando un compañero expuso en el tablero sobre el tal "try-catch". Recuerdo que menciono que era para manejar "excepciones"... sinceramente no conozco como utilizarlo aun... pero... mira esto:
Me salio el error siguiente, no me dejaba continuar... hice cambios en la clase GestorDeDatos... Elimine todos esos try-catch y coloque lo siguiente:
package Poli;
import java.util.Scanner;
public class GestorDeDatos {
//Constructor
public GestorDeDatos(){ /*vacio*/ }
//Método seleccion menu
public int recogerMenu(){ //método que controla la seleccion del menú
int numero = 0;
do{
System.out.println(" Elige una opción entre 1 y 4 \n ");
numero = recogerEntero();
} while (numero < 1 || numero > 4);
return numero;
}
public double recogerSuperficie(){ //método que controla la seleccion del menú
double numero = 0;
do{
System.out.println(" Introduce la superficie de la edificacion");
numero = recogerDouble();
} while (numero < 0 );
return numero;
}
public String recogerNombre(){ System.out.println("Introduce el nombre del polideportivo"); return recogerCadena(); }
public String recogerTipoPolideportivo(){ System.out.println("Introduce el tipo de polideportivo, Estadio, Pista de atletismo... "); return recogerCadena(); }
public int recogerNumeroOficinas(){ System.out.println(" Introduce el numero de oficinas del edificio: "); return recogerEntero(); }
public double recogerDouble(){
Scanner in = new Scanner(System.in);
return in.nextDouble();
}
public int recogerEntero(){
Scanner in = new Scanner(System.in);
return in.nextInt();
}
public String recogerCadena(){
Scanner in = new Scanner(System.in);
return in.nextLine();
}
}
De esta manera se me permitió continuar la ejecución:
Recomiendo: Probar tu programa antes de publicarlo en el foro y también, siempre trata de utilizar lo que has aprendido en este foro. Es bueno improvisar (yo lo hago y ya lo he hecho aqui
), pero trata siempre de utilizar hasta donde te han enseñado!
No he revisado nada del java avanzado, pero puedo jurar que el try-catch es tema de java avanzado xd
Espero haberte ayudado amigo!
Saludos y sigue asi!