Autor Tema: Java cuántas veces se puede usar método set objetos Ejercicio resuelto CU00652B  (Leído 4383 veces)

eduardoc

  • Principiante
  • **
  • Mensajes: 50
    • Ver Perfil
Buenas... Me remito a la entrega CU00652B del manual de programación en Java para no expertos.

"Verifica con la calculadora si este valor es correcto y trata de razonar sobre por qué se obtiene este valor y no otro. Crea también distintos objetos de tipo Deposito y utiliza sus métodos. En el caso de resultados numéricos, comprueba si los resultados que te ofrece el ordenador son correctos comparándolos con los resultados que te ofrece una calculadora."

Si, obtengo como resultado el mismo valor.

Coinciden con los cálculos hechos con la calculadora debido a que es la sumatoria del volumen de los 3 depósitos.

Consultas:

(Incluyo el código escrito en el ejercicio de referencia.)


Código: [Seleccionar]
public class Deposito{
    private float diametro;
    private float altura;
    private String idDeposito;
   
    // Constructor sin parámetros auxiliares.
    public Deposito(){
        this(0,0,"");
    }
     
      //Constructor de la clase que pide los parámetros necesarios
    public Deposito (float valor_diametro, float valor_altura, String valor_idDeposito) {
        if (valor_diametro > 0 && valor_altura > 0) {           
            diametro = valor_diametro;
            altura = valor_altura;
            idDeposito = valor_idDeposito;
        } else {
            diametro = 10;
            altura = 5;
            idDeposito = "000";
            System.out.println ("Creado depósito con valores por defecto diametro 10 metros altura 5 metros id 000" );
        }   
    }
   
    public void setValoresDeposito (String valor_idDeposito, float valor_diametro, float valor_altura) {
        idDeposito = valor_idDeposito;
        diametro = valor_diametro;
        altura = valor_altura;
        if (idDeposito !="" && valor_diametro > 0 && valor_altura > 0) {
        } else {
            System.out.println ("Valores no admisibles. No se han establecido valores para el depósito");
            //Deposito (0.0f, 0.0f, ""); Esto no es posible. Un constructor no es un método y por tanto no podemos llamarlo
            idDeposito = "";
            diametro = 0;
            altura = 0;
        }     
    }

    public float getDiametro () { return diametro; } //Método de acceso
    public float getAltura () { return altura; } //Método de acceso
    public String getIdDeposito () { return idDeposito; } //Método de acceso
    public float valorCapacidad () { //Método tipo función
        float capacidad;
        float pi = 3.1416f; //Si no incluimos la f el compilador considera que 3.1416 es double
        capacidad = pi * (diametro/2) * (diametro/2) * altura;
        return capacidad;
    }   
}


Puntualmente dentro del setter:

Código: [Seleccionar]
    public void setValoresDeposito (String valor_idDeposito, float valor_diametro, float valor_altura) {
        idDeposito = valor_idDeposito;
        diametro = valor_diametro;
        altura = valor_altura;
        if (idDeposito !="" && valor_diametro > 0 && valor_altura > 0) {
        } else {
            System.out.println ("Valores no admisibles. No se han establecido valores para el depósito");
            //Deposito (0.0f, 0.0f, ""); Esto no es posible. Un constructor no es un método y por tanto no podemos llamarlo
            idDeposito = "";
            diametro = 0;
            altura = 0;
        }     
    }


1. En la condición del if se utiliza el operador lógico && (and) pero no debería ser || (or)?
Si sólo el diámetro o la altura es igual a 0 no sería un error?
Es decir, como está expresado el condicional sería posible que algunos de los dos valores mencionados fuese igual a 0 y daría por válido el depósito.
(ídem para el constructor.)

2. Y desde mi ignorancia, el setter puede ejecutarse sin previa creación del objeto?
Entiendo que no. Y si primero se crea el objeto, por el constructor los valores no serían 0 siendo innecesario el condicional, es así?

Disculpas si estoy diciendo alguna burrada pero siento que necesario consultarlo para aprender ;)

Gracias mil, saludos. Edu.
« Última modificación: 10 de Julio 2016, 17:52 por Alex Rodríguez »

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:Ejercicio: (CU00652B) - Ejemplo de código Java básico...
« Respuesta #1 en: 03 de Julio 2016, 14:42 »
Buenas tardes, Edu.

Un pensamiento muy interesante. Si no existiera ningún depósito o si su diametro tuviera valor 0 lógicamente no tedría mucho sentido el resultado. Pero tal y como está establecida la condicional se podría producir el caso. Por lo tanto, llego a la misma conclusión que tú, tendría que haberse utilizado el operador lógico or y no and.

Sobre la segunda cuestión. Si estás hablando de la condicional en el método setter tendría sentido la condicional, porque al invocar dicho método se podrían poner parámetros "0". En cambio, si estás refiriéndote a la condicional en el constructor, también tiene sentido porque se podrían poner como parámetros "0" al crear el objeto (por ejemplo en el método main).

No sé si he podido contestarte bien a tu duda y si la he entendido bien.

Saludos.

eduardoc

  • Principiante
  • **
  • Mensajes: 50
    • Ver Perfil
Re:Ejercicio: (CU00652B) - Ejemplo de código Java básico...
« Respuesta #2 en: 03 de Julio 2016, 21:57 »
...Si estás hablando de la condicional en el método setter tendría sentido la condicional, porque al invocar dicho método se podrían poner parámetros "0"...

Dimiste qué tal?

Muchas gracias por tomarte el tiempo para responderme.
Después de leer tu respuesta y algunas entregas del curso me di cuenta a qué se debió mi confusión.
Entiendo que ambas verificaciones para saber si los valores son iguales a 0 son más que necesarias. El problema, o error, de mi parte fue suponer que el método setter sólo es usado en la inicialización de un objeto pero no es así, un setter puede ser utilizado cuantas veces sea necesario durante la "vida" del objeto por lo que el control es necesario.

Nuevamente, muchas gracias! Saludos,
Edu.

Dimitar Stefanov

  • Experto
  • *****
  • Mensajes: 598
    • Ver Perfil
Re:Ejercicio: (CU00652B) - Ejemplo de código Java básico...
« Respuesta #3 en: 04 de Julio 2016, 10:18 »
Tanto el setter, como cualquier método de un objeto.

No hay de que Edu. Estamos aquí para eso. Si te ha quedado alguna duda más no dudes en preguntar.

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