Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Chopi en 21 de Noviembre 2015, 14:07

Título: java.lang.NullPointerException: null ¿por qué me lanza este error? CU00642B
Publicado por: Chopi en 21 de Noviembre 2015, 14:07
Buenos días a todos, resulta que tengo un problema con este ejercicio:

Citar
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

Código: [Seleccionar]
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

Código: [Seleccionar]
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

Código: [Seleccionar]
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;}
}
Título: Re:java.lang.NullPointerException: null ¿por qué me lanza este error? CU00642B
Publicado por: Mario R. Rancel en 24 de Noviembre 2015, 09:18
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

Código: [Seleccionar]
    public CocinaCasa(){
        esIndependiente = false;
        numeroDeFuegos = 0;
    }

O bien un constructor

Código: [Seleccionar]
    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:

Código: [Seleccionar]
    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
Título: Re:java.lang.NullPointerException: null ¿por qué me lanza este error? CU00642B
Publicado por: Chopi en 26 de Noviembre 2015, 17:34
Vale, muchas gracias 8)