Autor Tema: casteo transformación de datos Java 0d para double 0f float Ejercicio CU00642B  (Leído 3306 veces)

tripeador

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 21
    • Ver Perfil
Ejercicio correspondiente al tema CU00642B del tutorial pdf de programación java desde cero con ejercicios resueltos.

"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. Ten en cuenta que antes tendrás que haber creado los objetos de tipo SalonCasa y CocinaCasa para poder pasárselos al constructor. Comprueba que el objeto
Casa se inicializa correctamente consultando el valor de sus atributos después de haber creado el objeto."


CLASE SalonCasa

Código: [Seleccionar]
//Clase salón casa
public class SalonCasa
{
    //Campos de la clase
    private int numeroDeTelevisores;
    private String tipoSalon;
    //Constructor
    public SalonCasa()
    {
        numeroDeTelevisores = 0;
        tipoSalon = "desconocido";
    }
    //Métodos para establecer valores (setters)
    public void setNumeroDeTelevisores (int  valorNumeroDeTelevisores) {numeroDeTelevisores = valorNumeroDeTelevisores;}
    public void setTipoSalon (String valorTipoSalon) {tipoSalon = valorTipoSalon;}
   
    //Metodos para obtener valores (getters)
    public int getNumeroDeTelevisores () {return numeroDeTelevisores;}
    public String getTipoSalon () {return tipoSalon;}
}


CLASE CocinaCasa

Código: [Seleccionar]
//Clase CocinaCasa
public class CocinaCasa
{
    //Campos de la clase
    private boolean esIndependiente;
    private int numeroDeFuegos;
    //Constructor
    public CocinaCasa()
    {
        esIndependiente = false;
        numeroDeFuegos = 0;
    }
    //Métodos para establecer valores (setters)
    public void setEsIndependiente (boolean valorEsIndependiente) {esIndependiente = valorEsIndependiente;}
    public void setNumeroDeFuegos (int valorNumeroDeFuegos) {numeroDeFuegos = valorNumeroDeFuegos;}
    //Métodos para obtener valores (setters)
    public boolean getEsIndependiente (){return esIndependiente;}
    public int geNumeroDeFuegos () {return numeroDeFuegos;}
}


CLASE Casa


Código: [Seleccionar]
//Clase Casa
public class Casa
{
    //Campos de la clase
    private double superficie;
    private String direccion;
    private SalonCasa salonCasa;
    private CocinaCasa cocina;
    //Constructor sin parámetros
    public Casa()
    {
        superficie = 00;
        direccion = "";
        salonCasa = new SalonCasa ();
        cocina = new CocinaCasa ();
    }
    //Constructor con parámetros
« Última modificación: 01 de Octubre 2020, 19:07 por Ogramar »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas, gracias por incluir el código de ejercicio, lenguaje, etc. Es importante para poder responder.

He mirado lo que has enviado y está bien, aunque la clase Casa está incompleta: le faltan los métodos. ¿Quizás no se pegó completa? Revísalo, puedes responder en este mismo hilo, la pones completa y la miro en cuanto pueda. Salu2


daenius

  • Sin experiencia
  • *
  • Mensajes: 24
    • Ver Perfil
A parte de lo que comenta el compañero, ¿cuál es tu duda? ¿Te salta algún error al compilar?

Yo de tú me haría una clase "test" con un main donde crearía lo que me piden:
Citar
crea un objeto de tipo Casa usando el constructor que recibe parámetros.
y
Citar
Comprueba que el objeto Casa se inicializa correctamente consultando el valor de sus atributos después de haber creado el objeto.

 Para eso claro está, necesitaría más parámetros en las clases que tengo. Al menos un equals() y hashCode() para evitar errores tontos que puedan surgir, pero sobretodo para que pueda jugar mejor con todo el problema (te pueden preguntar cuándo dos objetos de tipo Cocina son iguales o no, o bien, tener que trabajar con varios objetos de tu problema a la vez).
Obviamente, si tengo que sacar cosas por consola, el "toString()" es imperdible. Cada clase ha de tener el suyo con los atributos de la misma.

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Buenas daenius, se trata de uno de los ejercicio del curso Java desde cero que se puede encontrar en https://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188
Quien lo hace sube su propuesta de solución para que alguien más avanzado comente si está bien resuelto (de acuerdo con los contenidos del curso, no por libre, ya que en un ejercicio solo se pueden usar los contenidos vistos previamente en el curso).

Lo mismo se hace para otros cursos (https://aprenderaprogramar.com/index.php?option=com_content&view=article&id=57&Itemid=86)

Salu2

daenius

  • Sin experiencia
  • *
  • Mensajes: 24
    • Ver Perfil
Buenas daenius, se trata de uno de los ejercicio del curso Java desde cero

Ah, ya veo. Me pareció raro que tuviese un código el nombre del enunciado. Bueno, a ver qué responde el OP.

tripeador

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 21
    • Ver Perfil
Adjunto de nuevo la clase CASA completa

Código: [Seleccionar]
//Clase Casa
public class Casa
{
    //Campos de la clase
    private double superficie;
    private String direccion;
    private SalonCasa salon;
    private CocinaCasa cocina;
    //Constructor sin parámetros
    public Casa(){
        superficie = 00;
        direccion = "";
        salon = new SalonCasa ();
        cocina = new CocinaCasa ();
    }
    //Constructor con parámetros
    public Casa (double superficie, String direccion, SalonCasa objetoSalonCasa, CocinaCasa objetoCocinaCasa){
        superficie = 00;
        direccion = "desconocida";
        salon = objetoSalonCasa;
        cocina = objetoCocinaCasa;
    }
    //Metodos para establecer valores (setters)
    public void setSuperficie (double valorSuperficie){superficie = valorSuperficie;}

    public void setDireccion (String valorDireccion) {direccion = valorDireccion;}

    public void setSalonCasa (SalonCasa objetoSalonCasa) {
        salon = new SalonCasa();
        salon.setNumeroDeTelevisores(objetoSalonCasa.getNumeroDeTelevisores());
        salon.setTipoSalon(objetoSalonCasa.getTipoSalon());
    }

    public void setCocinaCasa (CocinaCasa objetoCocinaCasa) {
        cocina = new CocinaCasa();
        cocina.setEsIndependiente (objetoCocinaCasa.getEsIndependiente());
        cocina.setNumeroDeFuegos (objetoCocinaCasa.getNumeroDeFuegos());
    }

    public double getSuperficie(){return superficie;}

    public String getDireccion(){return direccion;}

    public SalonCasa getSalonCasa(){return salon;}

    public CocinaCasa getCocina(){return cocina;}
}
« Última modificación: 06 de Mayo 2020, 17:39 por tripeador »

daenius

  • Sin experiencia
  • *
  • Mensajes: 24
    • Ver Perfil
Hola,

Creo que la superficie al ser un double debe inicializarse con 0.0 y no como 00. Vamos, de siempre lo he hecho así.

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
00 es lo mismo que 0, es decir, es un int.

Java lo acepta, porque lo que hace es transformar automáticamente ese int a double, y no pasa nada.

Pero sí, es más adecuado, usar 0.0, más que nada porque al leer el código queda patente que se está trabajando con números reales.

Además se puede usar 0d , cuando es double, y también 0f si es float.

Pero vamos, es por cuestión de legibilidad del código. Java sí admite que inicialicemos un valor double con un int, porque lo transformará.

Lo que Java no admitiría es al contrario, a una variable int inicializar con un valor double como 0.0.
No lo admitiría porque considera que transformar eso a int es "perder información", porque se pierde la parte decimal, así que automáticamente no lo admite, a no ser que el programador fuerce el casteo
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

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