Autor Tema: ejercicio CU00636B clases java ejemplos if else condicionales  (Leído 10572 veces)

sergiomusan

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Hola buenas, en el ejercicio me piden que cree la clase, las variables que intervienen en ella, que las inicie en un constructor y que luego incorpore los métodos de los ejemplos que me dan de if.
y la duda es que no se que tengo que poner para introducir las variables ni el constructor

Gracias por adelantado
« Última modificación: 05 de Diciembre 2014, 12:00 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Re:ejercicio 636B
« Respuesta #1 en: 07 de Noviembre 2012, 12:45 »
Hola sergio, lo primero es: ¿Qué clase vamos a crear? Una clase define un tipo, como una clase Taxi o una clase Potenciador.

Elije un nombre para la clase que vas a crear.

A continuación piensa qué atributos va a tener esa clase. Por ejemplo en una clase Taxi puedes tener un atributo entero numeroDeRuedas, otro tipo double capacidadDelDeposito, otro booleano admiteDiscapacitados, etc.

Una vez elegidos los atributos, crea el constructor. En el constructor establece los valores iniciales que van a tener los atributos cuando se cree un objeto de la clase. Por ejemplo en el caso del taxi, numeroDeRuedas = 4;

Una vez creado el constructor, crea los métodos.

¿No sabes qué clase, atributos, constructor, métodos crear?

Lo que se plantea a modo de ejercicio es que te lo inventes tú. Creas la clase (inventada), luego los atributos (inventados) , luego el constructor (inventado) y luego los métodos donde hagas uso de las distintas formas de if.

Si no se te ocurre nada te podría proponer nombres para la clase como Edificio, Avion, Universidad, Carretera...

Mira a ver lo que puedes avanzar y si quieres ponme aquí el código al que hayas llegado y te comento cómo lo veo (esté completo o incompleto, por lo menos para ver a dónde llegas). Saludos.

sergiomusan

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 2
    • Ver Perfil
Re:ejercicio 636B
« Respuesta #2 en: 08 de Noviembre 2012, 10:37 »
esto es a lo que llego y a la hora de compilar me sale un error

public class condicion{
boolean DesplazamientoX;
public condicion(){
DesplazamientoX=true;
}
public boolean setDesplazamientoX (boolean valorDesplazamientoX){
if(DesplazamientoX==true){System.out.println ("Se ha admitido el valor");}
}
}

Gracias

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:ejercicio 636B
« Respuesta #3 en: 08 de Noviembre 2012, 13:13 »
Te falta poner un return para el método: tú estás declarando un método que debe devolver con un return un valor booleano, pero luego no pones el return, por eso te salta el error. Añadiendo el return ya funciona:

public class condicion{
boolean DesplazamientoX;
public condicion(){
DesplazamientoX=true;
}
public boolean setDesplazamientoX (boolean valorDesplazamientoX){
if(DesplazamientoX==true){System.out.println ("Se ha admitido el valor");}
return DesplazamientoX;
}
}

Por otro lado, podrías hacer que el método no devuelva nada, sino simplemente que ejecute un código, esto lo harías así:

public class condicion{
boolean DesplazamientoX;
public condicion(){
DesplazamientoX=true;
}
public void setDesplazamientoX (boolean valorDesplazamientoX){
if(DesplazamientoX==true){System.out.println ("Se ha admitido el valor");}

}
}

Tienes que diferenciar los métodos que devuelven algo de los que no devuelven nada.

Papipanchi

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:ejercicio CU00636B clases java
« Respuesta #4 en: 04 de Diciembre 2014, 00:22 »
Hola Ogramar.
Viendo el resultado que has dado para el ejercicio con la instrucción if, me hago la siguiente pregunta.

No es la instrucción if similar a la instrucción switch?
En caso positivo, porque la instrucción if si va anidada dentro del método set y a mi me dijiste que no se podía meter la instrucción switch dentro de un método set.

Saludos.

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:ejercicio CU00636B clases java
« Respuesta #5 en: 04 de Diciembre 2014, 12:21 »
Hola Papichanchi, efectivamente un if y un switch son similares. De hecho, cualquier switch se puede sustituir y reemplazarlo por if. Usamos el switch cuando nos resulte cómodo.

Sobre qué se puede meter dentro de un método set: dentro de un método set debes meter sólo el código necesario para establecer (set) algo. Si para establecer algo necesitas un if o un switch, puedes usarlo. Lo que no debes es introducir código que sea para hacer otra cosa.

El ejemplo que se nombra en este hilo no es demasiado adecuado, es un simple ejemplo de código pero olvídate de él como ejemplo de método set. Recuerda esto: un método set se usa para establecer algo.

Salu2

Papipanchi

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:ejercicio CU00636B clases java
« Respuesta #6 en: 04 de Diciembre 2014, 13:55 »
Entonces se podría introducir el if o el swicth dentro de un set para controlar que el dato que se establece es el correcto de forma automática?

Por ejemplo:
Estoy creando un objeto motorBomba y al establecer el atributo int tipoBomba le puedo indicar varios números dependiendo que tipo de bomba lleve ese motor, por ejemplo el valor 1 que sería bomba de agua. No sería lógico que si el objeto motorBomba que estoy creando no es una bomba de agua, me saltara un mensaje que me lo dijera? como pasa si metemos el if dentro del set?

Como se haría de forma correcta para que saltara el mensaje de forma automática sin estar dentro del set?

Perdona que insista pero no entiendo porque tengo que invocar la instrucción if a parte ya que lo veo un paso innecesario en este caso concreto. A lo mejor en otros casos no porque la información que se ofrece no es en principio relevante para el dato que estoy estableciendo. No se si me explico

En fin, adjunto dos ejercicios que en principio me supongo que no estarán correctos por el tema en cuestión.

Saludos.


Código: [Seleccionar]
//Ejercicio unidad CU00636B

public class Rueda
{
    private String clase;
    private double grosor;
    private double diametro;
    private String marca;

    public Rueda (){
        clase="";
        grosor=0.00;
        diametro=0.00;
        marca="";
    }

    //metodo para establecer el valor de clase
    public void setClase (String valorClase) {
        clase=valorClase;
    }
    //metodo para establecer el valor de grosor
    public void setGrosor (double valorGrosor) {
        grosor=valorGrosor;
    }
    //metodo para establecer el valor de diametro
    public void setDiametro (double valorDiametro) {
        diametro=valorDiametro;
        if (diametro>1.4) {System.out.println ("La rueda es para un vehículo grande");   
        }
        else if (diametro<=1.4 && diametro>0.8) {System.out.println ("La rueda es para un vehículo mediano");
        }
        else {
            System.out.println ("La rueda es para un vehículo 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");
        }
    }

    //metodo para establecer el valor de marca
    public void setMarca (String valorMarca) {
        marca=valorMarca;
    }

    //Metodos para devolver los valores de los atributos
    public String getClase () {return clase;}

    public double getGrosor () {return grosor;}

    public double getDiametro () {return diametro;}

    public String getMarca () {return marca;}
}


Código: [Seleccionar]
//Ejemplo entrega cu00636b
public class Ejercicio_if_else
{
    private String personaje;
    private boolean admitido;
    private int desplazamientoX;
    private int desplazamientoY;
   

    public Ejercicio_if_else () {
        admitido=false;     
        desplazamientoX=0;
        desplazamientoY=0;
    }

    //Metodo para establecer atributo admitido
    public void setAdmitido (boolean valorAdmitido) {
        admitido=valorAdmitido;
        if (admitido==true) {System.out.println ("Se ha admitido el valor");
        }
        else {System.out.println ("No se ha admitido el valor");
        }
    }
   
    public void setDesplazamientoX (int valorDesplazamientoX) {
        desplazamientoX=valorDesplazamientoX;
    }
   
    public void setDesplazamientoY (int valorDesplazamientoY) {
        desplazamientoY=valorDesplazamientoY;
   
    if(desplazamientoX==0&& desplazamientoY==1) {
        System.out.println ("Se procede a bajar el personaje 1 posición");
    }
    else if (desplazamientoX==1&& desplazamientoY==0) {
        System.out.println ("Se procede a mover el personaje 1 posición a la derecha");
    }
    else if (desplazamientoX==-1 && desplazamientoY==0) {
        System.out.println ("se procede a mover el personaje 1 posición a la izquierda");
    }
    else {
        System.out.println ("Los valores no son válidos");
    }
}
}

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:ejercicio CU00636B clases java
« Respuesta #7 en: 04 de Diciembre 2014, 14:46 »
Puedes usar un if o un switch o cualquier cosa dentro de un set siempre que sea necesario.

En tu código lo único necesario para establecer el diámetro es esto:

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

El resto sobra porque lo que hace el otro código no es establecer el valor del diámetro, sino hacer un análisis de las dimensiones y mostrar mensajes informativos, eso no es establecer el valor del diámetro.

El ejercicio mismo te lo indica: Crea un método denominado comprobarDimensiones donde a través de condicionales if realices las siguientes comprobaciones...

Por tanto todo el código de los if tiene que ir en un método independiente: cada método de encarga de una cosa.

El segundo código no sé a qué ejercicio corresponde  :-[

Salu2

Gilding

  • Sin experiencia
  • *
  • Mensajes: 44
    • Ver Perfil
Re:ejercicio CU00636B clases java
« Respuesta #8 en: 04 de Diciembre 2014, 18:46 »
Hola a todos!

Con vuestro permiso, me gustaría añadir algo más sobre la duda de Papipanchi. Voy a decir básicamente lo mismo que ha dicho Ogramar en su último post, pero utilizando un ejemplo, a ver si así queda más claro.

Papipanchi, imagina que ya hemos creado un objeto "Rueda" y sus atributos ya están establecidos, todos tienen un valor asignado distinto de cero o "vacio". Bien, ahora imagina que un tiempo después de haberse creado dicho objeto necesitas saber, apartir de su diámetro, que tipo de rueda es. Tal y como has planteado tu método set, estos serían los pasos que tendríamos que dar:

1º Invocar el método getDiametro(), puesto que como hace tiempo que creamos el objeto "Rueda", ya no recordamos el valor del diámetro.
2º Apuntar dicho valor o guardarlo en alguna variable nueva... es decir, memorizarlo.
3º Volver a asignar el mismo valor al diámetro del objeto "Rueda" mediante el método setDiametro(), para que al asignarlo nuevamente nos informe del tipo de rueda con el que estamos tratando.

Como ves es un tanto engorroso y redundante, al tener que volver a reestablecer el valor del diámetro, ir por esta vía. Sin embargo, si creamos un método comprobarDimensiones(), estos serían los pasos a dar:

1º Invocar el método comprobarDimensiones()... y ya está ;D.


Tal vez estes pensando: bueno, yo puedo hacer la comprobación en el método setDiametro() y después crear el método comprobarDimensiones(). Una cosa no quita la otra, ¿no?. Pero esto seria redundante porque estaríamos duplicando código innecesariamente.

¿Qué opciones tienes para realizar la comprobación automática del diámetro? Puedes crear el método comprobarDimensiones() y llamarlo dentro del método setDiametro(), pero esto no es "elegante", no es un diseño correcto por las razones que te ha indicado Ogramar, aunque si funcional. Tal vez lo más correcto es llamar al método setDiametro() y justo después al método comprobarDimensiones(), en el punto del código en el que te es necesario establecer el diámetro. Incluso podrías crear un bucle while que no permita salir del mismo hasta que el diámetro tenga un valor adecuado para cada situación.

!Hay que compartimentar ;)! Cada función o método debe tener su objetivo. Divide y vencerás. Esto nos permite crear códigos claros, limpios y versátiles.

Un saludo!

Papipanchi

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:ejercicio CU00636B clases java
« Respuesta #9 en: 04 de Diciembre 2014, 18:53 »
Gracias de nuevo Ogramar. Entonces el codigo correcto seria el que te adjunto?
Código: [Seleccionar]
//Ejercicio unidad CU00636B

public class Rueda
{
    private String clase;
    private double grosor;
    private double diametro;
    private String marca;

    public Rueda (){
        clase="";
        grosor=0.00;
        diametro=0.00;
        marca="";
    }

    //metodo para establecer el valor de clase
    public void setClase (String valorClase) {
        clase=valorClase;
    }
    //metodo para establecer el valor de grosor
    public void setGrosor (double valorGrosor) {
        grosor=valorGrosor;
    }
    //metodo para establecer el valor de diametro
    public void setDiametro (double valorDiametro) {
        diametro=valorDiametro;
    }
   

    //metodo para establecer el valor de marca
    public void setMarca (String valorMarca) {
        marca=valorMarca;
    }

    //Metodos para devolver los valores de los atributos
    public String getClase () {return clase;}

    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 vehículo grande");   
        }
        else if (diametro<=1.4 && diametro>0.8) {System.out.println ("La rueda es para un vehículo mediano");
        }
        else {
            System.out.println ("La rueda es para un vehículo 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: 04 de Diciembre 2014, 21:14 por Ogramar »

Papipanchi

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:ejercicio CU00636B clases java
« Respuesta #10 en: 04 de Diciembre 2014, 19:17 »
Hola Gilding.
Con todo el permiso del mundo, y muchas gracias por los comentarios y aclaraciones.
Entiendo perfectamente que si el método está dentro del set, para poder invocarlo primero tenemos que invocar el set y eso no es nada correcto. Estando de forma independiente se puede invocar siempre que se quiera sin tener que invocar previamente otro método.

Quizá mi problema es que cuando estoy escribiendo el código, de momento se me viene a la cabeza un formulario al cual le tengo que meter datos y eso es lo que me hace pensar erroneamente a la hora de situar los métodos. Es un pensamiento que tengo que olvidar por el momento. No es asi?

Saludos.

Gilding

  • Sin experiencia
  • *
  • Mensajes: 44
    • Ver Perfil
Re:ejercicio CU00636B clases java
« Respuesta #11 en: 04 de Diciembre 2014, 20:21 »
Efectivamente Papipanchi. Tienes que ver las clases y los objetos que crean las clases de una forma más abstracta. A mi es algo que me ha costado y me sigue costando mucho asimilar, es uno de los motivos principales por el que he llegado a aprenderaprogramar.com. Entiendo perfectamente el problema del compañero sergiomusan, puesto que a mi también me cuesta plantear una clase con todos sus atributos, campos y métodos necesarios. Siempre se me olvida algo jejeje. Sobre todo si son objetos abstractos que no existen de forma física en el mundo real.

Sin embargo no debes dejar de utilizar la impresión de variables, o más bien del valor de variables por consola. Es un método de testeo muy eficaz. Pero es para eso, para testear, en el código final debe quitarse.

Un consejo que puedo darte y que a mi me esta funcionando mucho es plantear el problema con pseudocódigo antes de empezar a programar propiamente dicho. Crear diagramas de flujo a partir del pseudocódigo también ayuda mucho a ver el problema desde otro punto de vista. En el curso de fundamentos de la programación nivel I explican muy bien como plantear pseudocódigo y como crear e interpretar diagramas de flujo.

Un saludo!

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
Re:ejercicio CU00636B clases java
« Respuesta #12 en: 04 de Diciembre 2014, 21:15 »
Papichanchi el último código que has pegado está perfecto (ahora sí). Y gracias a Gilding por las aportaciones...

Salu2

Papipanchi

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 38
    • Ver Perfil
Re:ejercicio CU00636B clases java ejemplos if else condicionales
« Respuesta #13 en: 05 de Diciembre 2014, 18:49 »
Ok Ogramar.

En general, gracias a todos por las aportaciones y perdonad por el coñazo que os doy

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