Autor Tema: Java ejercicios resueltos errores comunes principiantes mejorar código CU00641B  (Leído 1024 veces)

Cpantoja

  • Sin experiencia
  • *
  • Mensajes: 11
  • En la vida nunca se termina de aprender.
    • Ver Perfil
Buenos días compañeros. He realizado el ejercicio de clases que utilizan objetos CU00641B de tutorial pdf de programación Java. He tratado de apegarme lo mas posible a las indicaciones del ejercicio y al ejemplo dado en el mismo capitulo. Agradezco vuestras observaciones.

El código es el siguiente:

Clase SalonCasa:

Código: [Seleccionar]
public class SalonCasa {

    private int numeroDeTelevisores;
    private String tipoSalon; // 1 - Recepciones, 2 - Juntas, 3 - Fiestas
   
   
    //Constructor
    public SalonCasa() {
    numeroDeTelevisores = 0;
    tipoSalon = "Desconocido";
    }
    //Metodo para establecer el numeroDeTelevisores para el objeto saloncasa
    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores) {
        numeroDeTelevisores = valorNumeroDeTelevisores;
    }
    //Metodo para establecer el tipoSalon para el objeto saloncasa
    public void setTipoSalon(String valorTipoSalon) {
        tipoSalon = valorTipoSalon;
    }
    //Metodo para obtener numeroDeTelevisores del objeto saloncasa
    public int getNumeroDeTelevisores() {
        return numeroDeTelevisores;
    }
    //Metodo para obtener el tipoSalon del objeto saloncasa
    public String getTipoSalon() {
        return  tipoSalon;
    }
}


Clase CocinaCasa:

Código: [Seleccionar]
public class CocinaCasa {

    private boolean esIndependiente;
    private int numeroDeFuegos;
   
    //Constructor
    public CocinaCasa() {
        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;
    }
}


Clase Casa:

Código: [Seleccionar]
public class Casa {

    //Declaracion de objetos y variables
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocinaCasa;
   
    //Constructor. Aqui establecemos los valores para las dos variables locales de tipo Casa
    public Casa(double valorSuperficie, String valorDireccion) {
        superficie = valorSuperficie;
        direccion = valorDireccion;
        salonCasa = new SalonCasa();
        cocinaCasa = new CocinaCasa();
    }
   
    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores) {
        salonCasa.setNumeroDeTelevisores(valorNumeroDeTelevisores);
    }
    public void setTipoSalon(String valorTipoSalon) {
        salonCasa.setTipoSalon(valorTipoSalon);
    }
    public void setEsIndependiente(boolean valorEsIndependiente) {
        cocinaCasa.setEsIndependiente(valorEsIndependiente);
    }
    public void setNumeroDeFuegos(int valorNumeroDeFuegos) {
        cocinaCasa.setNumeroDeFuegos(valorNumeroDeFuegos);
    }
    //Metodo que devuelve la informacion del objeto casa
    public String getDatosCasa() {
        int numeroDeTelevisores = salonCasa.getNumeroDeTelevisores();
        String tipoSalon = salonCasa.getTipoSalon();
        boolean esIndependiente = cocinaCasa.getEsIndependiente();
        int numeroDeFuegos = cocinaCasa.getNumeroDeFuegos();
        String cadenaSalonCasa = "";
        if(tipoSalon == "1") {
            cadenaSalonCasa = "1. Recepciones";
        } else if(tipoSalon == "2") {
            cadenaSalonCasa = "2. Juntas";
        } else if(tipoSalon == "3") {
            cadenaSalonCasa = "3. Fiestas";
        } else {
            cadenaSalonCasa = "Este tipo de salon No existe";
        }
        String datosCasa = "El objeto Casa presenta estos datos. Superficie: " + superficie +
                            "\nDireccion: " + direccion + " Numero de televisores: " + numeroDeTelevisores +
                            " Tipo de salon: " + cadenaSalonCasa + "\n¿Es independiente la cocina? " + esIndependiente +
                            " Numero de fuegos de la cocina: " + numeroDeFuegos;
                           
                            System.out.println(datosCasa);
                            return datosCasa;
    }
   
}
« Última modificación: 15 de Octubre 2020, 18:23 por Ogramar »

elendur14

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola Cpantoja

He leido tu codigo solo una observacion.

En la clase SalonCasa() tienes declarado la variable tipoSalon como un objeto String.
y en la clase Casa() cuando haces la comparacion tipoSalon == "1", esta mal.

Ya que los objetos no se pueden comparar con ==.

Recuerda que los objetos tipo String se comparan con el metodo cadena1.equals(cadena2);

en tu caso seria tipoSalon.equals("1");

La otra opcion que veo es que cambies la variable tipoSalon a int recuerda que las vairiables primitivas con mas rapidas de procesar.

Saludos

Cpantoja

  • Sin experiencia
  • *
  • Mensajes: 11
  • En la vida nunca se termina de aprender.
    • Ver Perfil
Hola elendur14,

Gracias por la observación y por la corrección de ese punto, ahora ya se como se manejan las comparaciones de los objetos (utilizando el método equals), probaré ambas sugerencias (convirtiendo la variable a int) para reforzar mi aprendizaje.

Saludos.

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2644
    • Ver Perfil
Buenas, añado algunas cuestiones: tienes mal el planteamiento del constructor de la clase Casa, ya que no estás incluyendo los atributos SalonCasa y CocinaCasa. Todos los atributos son atributos, independientemente de que sean tipos primitivos u objeto. También tienes mal los métodos set y get de la clase Casa. En este hilo tienes una explicación (verla con calma): https://aprenderaprogramar.com/foros/index.php?topic=1220.0

Nota: siguiendo a https://aprenderaprogramar.com/foros/index.php?topic=1460.0 cuando pongas título a un tema por el código (p.ej. CU00641B) al final del mensaje

Salu2

Cpantoja

  • Sin experiencia
  • *
  • Mensajes: 11
  • En la vida nunca se termina de aprender.
    • Ver Perfil
Hola Ogramar,

Te agradezco las observaciones, revisaré con detenimiento las referencias enviadas para corregir los faltantes en mi ejercicio, soy novato en esto, pero se que con esmero se puede alcanzar la meta.

Saludos.

Cpantoja

  • Sin experiencia
  • *
  • Mensajes: 11
  • En la vida nunca se termina de aprender.
    • Ver Perfil
Hola de nuevo compañeros:

En Base a las observaciones planteadas por los compañeros con experiencia, he modificado las clases según las referencias sugeridas. Pude observar que hay varias formas de plantear el código, elegí una que va mas orientada al manejo de objetos.
De antemano agradezco vuestra opinión al respecto. Aclaro que he omitido las condicionales if-else, ya que por el momento lo que me interesa es saber si estoy  manejando bien los objetos y las relaciones de uso entre clases.

Gracias.

Clase SalonCasa:

Código: [Seleccionar]
public class SalonCasa {

    private int numeroDeTelevisores;
    private String tipoSalon;
   
    //constructor
    public SalonCasa() {
        numeroDeTelevisores = 0;
        tipoSalon = "Desconocido";
    }
    //setters
    public void setNumeroDeTelevisores(int valorNumeroDeTelevisores) {
        numeroDeTelevisores = valorNumeroDeTelevisores;
    }
    public void setTipoSalon(String valorTipoSalon) {
        tipoSalon = valorTipoSalon;
    }
    //Getters
    public int getNumeroDeTelevisores() {
        return numeroDeTelevisores;
    }
    public String getTipoSalon() {
        return tipoSalon;
    }
}


Clase CocinaCasa:

Código: [Seleccionar]
public class CocinaCasa {

    private boolean esIndependiente;
    private int numeroDeFuegos;
   
    //Constructor
    public CocinaCasa() {
    esIndependiente = false;
    numeroDeFuegos = 0;
    }
    //setters
    public void setEsIndependiente(boolean valorEsIndependiente) {
        esIndependiente = valorEsIndependiente;
    }
    public void setNumeroDeFuegos(int valorNumeroDeFuegos) {
        numeroDeFuegos = valorNumeroDeFuegos;
    }
    public boolean getEsIndependiente() {
        return esIndependiente;
    }
    public int getNumeroDeFuegos() {
        return numeroDeFuegos;
    }
}


Clase Casa:

Código: [Seleccionar]
//Clase con otras clases
public class Casa {

    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;
   
    //Constructor
    public Casa() {
        superficie = 0.0;
        direccion = "";
        salonCasa = new SalonCasa();
        cocina = new CocinaCasa();
    }
    //setters de esta clase
    public void setSuperficie(double valorSuperficie) {
        superficie = valorSuperficie;
    }
    public void setDireccion(String valorDireccion) {
        direccion = valorDireccion;
    }
    /* La idea de este metodo es copiar el objeto que se recibe para no inmiscuirnos
     * en tareas que son propias de la clase SalonCasa.*/
    public void setSalonCasa(SalonCasa valorSalonCasa) {
        salonCasa.setNumeroDeTelevisores(valorSalonCasa.getNumeroDeTelevisores());
        salonCasa.setTipoSalon(valorSalonCasa.getTipoSalon());
    }
    public void setCocinaCasa(CocinaCasa valorCocinaCasa) {
        cocina.setEsIndependiente(valorCocinaCasa.getEsIndependiente());
        cocina.setNumeroDeFuegos(valorCocinaCasa.getNumeroDeFuegos());
    }
    //Getters de la clase local
    public double getSuperficie() {
        return superficie;
    }
    public String getDireccion() {
        return direccion;
    }
    //Getters de las clases relacionadas
    public SalonCasa getSaloncasa() {
        return salonCasa;
    }
    public CocinaCasa getCocinaCasa() {
        return cocina;
    }
}



 

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