Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: arcanFAC en 08 de Marzo 2015, 21:54

Título: Curso aprender Java (CU00636B). Ejemplo if else simple, if - else if compuesto.
Publicado por: arcanFAC en 08 de Marzo 2015, 21:54
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");
    }
}
Título: Re:Curso aprender Java (CU00636B). Ejemplo if else simple, if - else if compuesto.
Publicado por: toni_apr en 09 de Marzo 2015, 22:43
Hola arcanFAC

Ejercicio impecable.

Saludos
Título: Re:Curso aprender Java (CU00636B). Ejemplo if else simple, if - else if compuesto.
Publicado por: Andromon en 04 de Abril 2015, 14:10
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.
Título: Re:Curso aprender Java (CU00636B). Ejemplo if else simple, if - else if compuesto.
Publicado por: toni_apr en 04 de Abril 2015, 21:21
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
Título: Re:Curso aprender Java (CU00636B). Ejemplo if else simple, if - else if compuesto.
Publicado por: Andromon en 05 de Abril 2015, 11:44
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.