Autor Tema: java.lang.NullPointerException: null ¿por qué me lanza este error? CU00642B  (Leído 2989 veces)

Chopi

  • Sin experiencia
  • *
  • Mensajes: 8
    • Ver Perfil
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;}
}
« Última modificación: 24 de Noviembre 2015, 09:13 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
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

Chopi

  • Sin experiencia
  • *
  • Mensajes: 8
    • Ver Perfil
Vale, muchas gracias 8)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".