Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Chopi en 21 de Noviembre 2015, 14:07
-
Buenos días a todos, resulta que tengo un problema con este ejercicio:
Define tres clases: Casa, SalonCasa y CocinaCasa. La clase SalonCasa debe tener como atributos numeroDeTelevisores (int) y tipoSalon (String) y disponer de un constructor que los inicialice a 0 y “desconocido”. La clase CocinaCasa debe tener como atributos esIndependiente (boolean) y numeroDeFuegos (int) y un constructor que los inicialice a false y 0. La clase Casa tendrá los siguientes atributos de clase: superficie (double), direccion (String), salonCasa (tipo SalonCasa) y cocina (tipo CocinaCasa). Define un constructor para la clase Casa que establezca a unos valores de defecto los atributos simples y que cree nuevos objetos si se trata de atributos objeto. Define otro constructor que reciba como parámetros la superficie, dirección y un objeto de tipo SalonCasa y otro de tipo CocinaCasa. Compila el código para comprobar que no presenta errores, y crea un objeto de tipo Casa usando el constructor que recibe parámetros.
Mi duda es que después de haber compilado bien el código creo los objetos de SalonCasa y CocinaCasa y finalmente el objeto Casa, pasándole como parámetros los nombres de los otros dos objetos, pero entonces se abre una ventana que pone literalmente: java.lang.NullPointerException: null
Les dejo mi código 8)
Clase Casa
public class Casa{
private double superficie;
private String direccion;
private SalonCasa salonCasa;
private CocinaCasa cocina;
public Casa(double superficieC, String direccionC, SalonCasa saloncasaC, CocinaCasa cocinaCasaC){
superficie = superficieC;
direccion = direccionC;
salonCasa = new SalonCasa(salonCasa.getNumeroTV());
cocina = new CocinaCasa(cocina.getEsIndependiente());
}
}
Clase CocinaCasa
public class CocinaCasa{ //esta es la segunda clase
private boolean esIndependiente;
private int numeroDeFuegos;
public CocinaCasa(boolean esIndependienteC){
esIndependiente = esIndependienteC;
numeroDeFuegos = 0;
}
public boolean getEsIndependiente(){return esIndependiente;}
}
Clase SalonCasa
public class SalonCasa{ //esta es la tercera clase
private int numeroDeTelevisores;
private String tipoSalon;
public SalonCasa(int numeroTV){
numeroDeTelevisores = numeroTV;
tipoSalon = "desconocido";
}
public int getNumeroTV(){return numeroDeTelevisores;}
}
-
Hola Chopi cuando vayas a pegar código de varias clases hazlo así:
Clase 1
[ code ]
...
[ / code]
Clase 2
[ code ]
...
[ / code]
Clase 3
[ code ]
...
[ / code]
En tu ejercicio tendrías diversas cosas a mejorar.
Clase CocinaCasa:
El constructor compila pero no es correcto si nos atenemos a los estándares. Podrías tener un constructor
public CocinaCasa(){
esIndependiente = false;
numeroDeFuegos = 0;
}
O bien un constructor
public CocinaCasa(boolean esIndependienteC, int numeroDeFuegosC){
esIndependiente = esIndependienteC;
numeroDeFuegos = numeroDeFuegosC;
}
O bien ambos, pero el constructor que tú has definido no es en principio adecuado (podría usarse si estuviera justificado, pero no parece que aquí esté justificado).
En la clase CocinaCasa deberías tener métodos get y set para cada uno de los atributos, no los tienes.
En la clase SalonCasa podemos aplicar los mismos comentarios.
En la clase Casa además de faltarte los get y los set tienes esto en el constructor:
salonCasa = new SalonCasa(salonCasa.getNumeroTV());
Aquí parece que te has confundido y habrías querido escribir
salonCasa = new SalonCasa(salonCasaC.getNumeroTV());
El error te lo tira porque al hacer salonCasa = new SalonCasa(salonCasa.getNumeroTV()); el objeto salonCasa no está definido. Si el objeto no ha sido creado, no puedes invocar un método sobre él.
También podrías tener el parámetro con el mismo nombre que el atributo y utilizar this para diferenciarlos, por ejemplo:
public Casa(double superficie, String direccion, SalonCasa saloncasa, CocinaCasa cocinaCasa){
this.superficie = superficie;
this.direccion = direccion;
this.salonCasa = new SalonCasa(salonCasa.getNumeroTV());
this.cocina = new CocinaCasa(cocinaCasa.getEsIndependiente());
}
Te recomiendo revisar los contenidos previos del curso y hacer todos los ejercicios previos si no lo has hecho. También mirar estos hilos:
Ejercicio CU00641B: https://www.aprenderaprogramar.com/foros/index.php?topic=1220.0
Ejercicio CU00642B: https://www.aprenderaprogramar.com/foros/index.php?topic=1238.0
Saludos
-
Vale, muchas gracias 8)