Autor Tema: Ejemplo pasar objetos como parámetros a un método o constructor Java. (CU00642B)  (Leído 4020 veces)

Akjack

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Buenas noches

llevo desde ayer dándole vueltas y no doy con lo que estoy haciendo mal...pero en la clase casa,me da error :(
a ver si alguien me puede echar una manilla...

Código: [Seleccionar]
public class SalonCasa
{
    // instance variables - replace the example below with your own
    private int numeroDeTelevisores;
    private String tipoSalon;

    /**
     * Constructor for objects of class SalonCasa
     */
    public SalonCasa(int numeroDeTelevisores, String tipoSalon)
    {
        numeroDeTelevisores = 0;
        tipoSalon = "Desconocido";
    }

   
    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores){
        valorNumeroDeTelevisores = numeroDeTelevisores;
    }
    public void setTipoSalon (String valorTipoSalon){
        valorTipoSalon = tipoSalon;
    }
    public int getNumeroDeTelevosores(){
        return numeroDeTelevisores;
    }
    public String getTipoSalon(){
        return tipoSalon;
    }
}


Código: [Seleccionar]
public class CocinaCasa
{
    // instance variables - replace the example below with your own
    private boolean esIndependiente;
    private int numeroDeFuegos;

   
    public CocinaCasa(boolean esIndependiente, int numeroDeFuegos)
    {
      esIndependiente = false;
      numeroDeFuegos = 0;
    }

   
    public void setEsIndependiente(boolean valorEsIndependiente){
        esIndependiente = valorEsIndependiente;
    }
    public void setNumeroDeFuegos(int valorNumeroDeFuegos){
        numeroDeFuegos = valorNumeroDeFuegos;
    }
    public boolean getEsIndependiente(){
        return esIndependiente;
    }
    public int getNumeroDeFuegos(){
        return numeroDeFuegos;
    }
}

Código: [Seleccionar]
public class Casa
{
    // instance variables - replace the example below with your own
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;

   
    public Casa()
    {
       superficie= 0;
       direccion = "";
       salonCasa= new SalonCasa();
       cocinaCasa= new CocinaCasa();
    }
    public Casa(double valorSuperficie,String valorDireccion,SalonCasa valorSalonCasa,CocinaCasa valorCocinaCasa){
        superficie = valorSuperficie;
        direccion = valorDireccion;
        salonCasa = valorSalonCasa;
        cocinaCasa = valorCocinaCasa;
    }

   
    public void setSuperficie(int valorSuperficie){
        superficie = valorSuperficie;
    }
    public void setDireccion(String valorDireccion){
        direccion=valorDireccion;
    }
    public void setSalonCasa(SalonCasa valorSalonCasa){
        salonCasa=valorSalonCasa;
    }
    public void setCocinaCasa(CocinaCasa valorCocinaCasa){
        cocinaCasa=valorCocinaCasa;
    }
    public double getValorSuperficie(){
    return superficie;
}
    public String getValorDireccion(){
        return direccion;
    }
    public SalonCasa getValorSalonCasa(){
        return salonCasa;
    }
    public CocinaCasa getValorCocinaCasa(){
        return cocinaCasa;
    }
}


Mil gracias por vuestra ayuda de antemano.

Un saludo!
« Última modificación: 16 de Marzo 2015, 17:05 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Akjack

Si, todo tu código está bien excepto lo que te hace bailar la cabeza en la clase Casa.

En la clase Casa, en el constructor sin parámetros inicializas el objeto salonCasa usando la instrucción:
    salonCasa= new SalonCasa();
donde SalonCasa() hace referencia al constructor de la clase SalonCasa que no recibe parámetros (los paréntesis del constructor están vacíos), cuando en tu clase SalonCasa el único constructor que hay recibe dos parámetros.
Ahí está el error.
Por cierto, no tiene sentido crear un constructor con parámetros y luego no usarlos para inicializar los atributos.

Así pues, si el constructor del objeto que quieres crear no recibe parámetros, se invoca el constructor con los paréntesis vacíos. Y si tiene parámetros, se invoca aportando entre los paréntesis los parámetros requeridos.

Lo mismo te ocurre con el atributo cocinaCasa.

Visto esto, creo que sabrás subsanar el error. Si tienes alguna duda, pregunta.

Saludos.

Akjack

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
Hola Toni,ya no me da error pero no se si esta correcto:

Código: [Seleccionar]
public class Casa
{
    // instance variables - replace the example below with your own
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;

   
    public Casa(SalonCasa objetoSalon, CocinaCasa objetoCocina)
    {
       superficie= 0;
       direccion = "";
       salonCasa= new SalonCasa(0,"Desconocido");
       cocinaCasa= new CocinaCasa(false,0);
    }
    public Casa(double valorSuperficie,String valorDireccion,SalonCasa valorSalonCasa,CocinaCasa valorCocinaCasa){
        superficie = valorSuperficie;
        direccion = valorDireccion;
        salonCasa = valorSalonCasa;
        cocinaCasa = valorCocinaCasa;
    }

   
    public void setSuperficie(int valorSuperficie){
        superficie = valorSuperficie;
    }
    public void setDireccion(String valorDireccion){
        direccion=valorDireccion;
    }
    public void setSalonCasa(SalonCasa valorSalonCasa){
        salonCasa=valorSalonCasa;
    }
    public void setCocinaCasa(CocinaCasa valorCocinaCasa){
        cocinaCasa=valorCocinaCasa;
    }
    public double getValorSuperficie(){
    return superficie;
}
    public String getValorDireccion(){
        return direccion;
    }
    public SalonCasa getValorSalonCasa(){
        return salonCasa;
    }
    public CocinaCasa getValorCocinaCasa(){
        return cocinaCasa;
    }
}


Pongo solo la clase casa,ya que las otras dos están en el primer mensaje.
La duda es,no debería llamar al constructor de las otras clases para que me pasen el valor en vez de ponerlo yo en el constructor de la clase casa?
o eso es solo para el segundo constructor?

Mil gracias por tu respuesta,ya veo algo de luz :)

Un saludo!

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola Akjack

En este ejercicio no se pedía que las clases SalonCasa y CocinaCasa tuvieran constructores con parámetros, sino que inicializáramos a 0 y desconocido (eso se hace en un constructor sin parámetros)

Para estas clases puedes escribir el constructor sin parámetros y en la clase Casa utilizas esta instrucción para inicializar
    salonCasa= new SalonCasa();

Saludos

Akjack

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 5
    • Ver Perfil
vale,ya lo he pillao

he quitao los parámetros de la clase SalonCasa y CocinaCasa y en la clase Casa el constructor también esta sin parámetros
Si los tenia con parámetros daba error por no tener en Casa los parámetros,y al poner parámetros en Casa,no daba error,pero no es lo que se pedía

ya lo entiendo

Muchas gracias por todo Toni,eres un krak

Saludos!

 

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".