Autor Tema: Curso aprender Java (CU00636B). Ejemplo if else simple, if - else if compuesto.  (Leído 4238 veces)

arcanFAC

  • Visitante
Aqui traigo este ejercicio para que me corrijan si esta mal:

Citar
Considera estás desarrollando un programa Java donde necesitas trabajar con objetos de tipo Rueda (que representa a una rueda de un vehículo). Define una clase Rueda considerando los siguientes atributos de clase: tipo (String), grosor (double), diametro (double), marca (String). Define un constructor asignando unos valores de defecto a los atributos y los métodos para poder establecer y obtener los valores de los atributos. Crea un método denominado comprobarDimensiones donde a través de condicionales if realices las siguientes comprobaciones:

a) Si el diámetro es superior a 1.4 debe mostrarse por consola el mensaje “La rueda es para un vehículo grande”. Si es menor o igual a 1.4 pero mayor que 0.8 debe mostrarse por consola el mensaje “La rueda es para un vehículo mediano”. Si no se cumplen ninguna de las condiciones anteriores debe mostrarse por pantalla el mensaje “La rueda es para un vehículo pequeño”.

b) Si el diámetro es superior a 1.4 con un grosor inferior a 0.4, ó si el diámetro es menor o igual a 1.4 pero mayor que 0.8, con un grosor inferior a 0.25, deberá mostrarse por consola el mensaje “El grosor para esta rueda es inferior al recomendado”.

Código: [Seleccionar]
public class Rueda{
    private String tipo;
    private double grosor;
    private double diametro;
    private String marca;

    public Rueda(){
        tipo = "";
        grosor = 0.0;
        diametro = 0.0;
        marca = "";
    }

    public void setTipo(String valorTipo){
        tipo = valorTipo;
    }

    public void setGrosor(double valorGrosor){
        grosor = valorGrosor;
    }

    public void setDiametro(double valorDiametro){
        diametro = valorDiametro;
    }

    public void setMarca(String valorMarca){
        marca = valorMarca;
    }

    public String getTipo(){return tipo;}

    public double getGrosor(){return grosor;}

    public double getDiametro(){return diametro;}

    public String getMarca(){return marca;}

    public void comprobarDimensiones(){
        if(diametro > 1.4)
            System.out.println("La rueda es para un vehiculo grande");
        else if(diametro > 0.8 && diametro <= 1.4)
            System.out.println("La rueda es para un vehiculo mediano");
        else
            System.out.println("La rueda es para un vehiculo pequeño");

        if((diametro > 1.4 && grosor < 0.4) || (diametro <= 1.4 && diametro > 0.8 && grosor < 0.25))
            System.out.println("El grosor para esta rueda es inferior al recomendado");
    }
}
« Última modificación: 09 de Marzo 2015, 08:49 por Alex Rodríguez »

toni_apr

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

Ejercicio impecable.

Saludos

Andromon

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Hola, toni_apr tengo una duda respecto a este ejercicio, y como la solución que yo había alcanzado es muy parecida salvo una pequeña diferencia, me gustaría aprovechar el tema del otro compañero arcan.

Código: [Seleccionar]
    public void comprobarDimensiones(){
        if(diametro > 1.4)
            System.out.println("La rueda es para un vehiculo grande");
        else if(diametro > 0.8 && diametro <= 1.4)

A lo mejos es rizar el rizo, pero, por qué en el else if hay que especificar la segunda cláusula diametro <= 1.4 ¿? ¿Entiendo que si Java ha llegado a hasta esa sentencia, es porque previamente diametro > 1.4 ya ha fallado? ¿O es que si las dos fuesen verdaderas, no se ejecutan secuencialmente y ambas se ejecutarían? Es para entender bien cómo funciona el lenguaje.

Quiero decir, yo propondría esto:

Código: [Seleccionar]
    public void comprobarDimensiones(){
        if(diametro > 1.4)
            System.out.println("La rueda es para un vehiculo grande");
        else if(diametro > 0.8)

Vale, luego, por otro lado, la solución que ha dado el compañero me parece buena, y entiendo que es mejor, pero, ¿se pueden anidar los if relativos al grosor dentro de los del diámetro?

En vez de

Código: [Seleccionar]
        if((diametro > 1.4 && grosor < 0.4) || (diametro <= 1.4 && diametro > 0.8 && grosor < 0.25))
            System.out.println("El grosor para esta rueda es inferior al recomendado");
    }

Código: [Seleccionar]
        if (diametro > 1.4){
            System.out.println("La rueda es para un vehículo grande");
            if (grosor < 0.4){
                System.out.println("El grosor para esta rueda es inferior al recomendado");
            }
        }

        else if (diametro > 0.8){
            System.out.println("La rueda es para un vehículo mediano");
            if (grosor < 0.25){
                System.out.println("El grosor para esta rueda es inferior al recomendado");
            }
        }

Si fuese válida y ambas funcionan, de cara a estilos o buenas prácticas de programación o escalabilidad, ¿cuál es mejor?

Un saludo y gracias.

toni_apr

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

Es cierto, tu código utiliza menos expresiones para obtener el mismo resultado.
El código, completando el (if, else if, else ) sería:

Código: [Seleccionar]
    public void comprobarDimensiones(){
        if(diametro > 1.4)
            System.out.println("La rueda es para un vehiculo grande");
        else if(diametro > 0.8)
            System.out.println("La rueda es para un vehiculo mediano");
        else
            System.out.println("La rueda es para un vehiculo pequeño");

        // comprobando grosor
        if((diametro > 1.4 && grosor < 0.4) || (diametro <= 1.4 && diametro > 0.8 && grosor < 0.25))
            System.out.println("El grosor para esta rueda es inferior al recomendado");
    }
En cuanto a anidar los if, poder se puede, aunque tengo un pero en este caso.
La línea
    System.out.println("El grosor para esta rueda es inferior al recomendado");
se repite dos veces.

Mi opinión en el caso del if anidado, es mantener las decisiones separadas.
En el caso actual los valores del diámetro para el tamaño del coche coincide en las condiciones del grosor y la anidación funciona (aunque el mensaje por consola esté duplicado)
Es decir, si los diámetros para el cálculo en lugar de 1.4 y .8 fueran 1.2 y .75, forzosamente tendrías que descartar la anidación de los if que propones.

Saludos

Andromon

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 7
    • Ver Perfil
Sí correcto, me parece mucho mejor esa forma que dices de enfocarlo como dos decisiones separadas, cada una para una cosa, queda mucho más claro y como dices más escalable.

Un saludo y gracias.
« Última modificación: 06 de Abril 2015, 23:37 por Alex Rodríguez »

 

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