Autor Tema: Java manipulación indebida de atributos desde métodos error de concepto CU00673B  (Leído 2482 veces)

matru

  • Sin experiencia
  • *
  • Mensajes: 41
    • Ver Perfil
Solución planteada para el ejercicio CU00673B del tutorial de programación Java desde cero:

Código: [Seleccionar]

public class Circulo{

    private static final double numeroPi = 3.1416;
    private double radio;
   
    public Circulo(){

        radio = 0;
    }

    public void setRadio(double radio){

        this.radio = radio;
    }

    public double getRadio(){return radio;}

    public double getAreaCirculo(){

        radio = radio*radio;
        double area = numeroPi * radio;
        return area;
    }

    public double getLongitudCirculo(){

        double longitud = 2 * numeroPi * radio;
        return longitud;
    }

}


Código: [Seleccionar]


import java.util.Scanner;

public class TestCirculo{

    public static void main(String []args){

        Scanner entrada = new Scanner(System.in);
        Circulo circulo = new Circulo();
        String des ="";
        boolean desicion = false;
        System.out.println("Para carcular el area y la longitud de un circulo Ingrese el radio: ");

        while(desicion == false){

            circulo.setRadio(Double.valueOf(entrada.nextLine()));
            System.out.println("El circulo tiene una longitud de: " + circulo.getLongitudCirculo() + "\nCon un Area de: "+circulo.getAreaCirculo()+"\n");

            System.out.println("Si desea obtener la longitud o area de otro Circulo ingrese SI de lo contrario ingrese NO:");
            do{
                des = entrada.nextLine();

                if(des.equalsIgnoreCase("si")){

                    System.out.println("Ingrese el radio: ");
                    des ="si";
                }else if(!des.equalsIgnoreCase("si") && !des.equalsIgnoreCase("no")){

                    System.out.print("La palabra que ingreso no es correpta intentelo de nuevo: ");
                    des = "no";
                }else{

                    System.out.println("Gracias por utilizar nuestro servicio!");
                    des = "si";
                    desicion = true;
                }   
            }while(des.equalsIgnoreCase("no"));

        }
    }

}





Citar
¿Es posible crear un método en la clase Circulo para establecer el valor de numeroPi?
No

¿Por qué?
por que el valor que se le asigna a una variable de tipo final es de contenido invariable de hacerlo esto llevaría a errores.


« Última modificación: 17 de Marzo 2016, 09:52 por Mario R. Rancel »

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Buenos días matru

Tienes un error de concepto:

Código: [Seleccionar]
    public double getAreaCirculo(){
        radio = radio*radio;
        double area = numeroPi * radio;
        return area;
    }

El radio del círculo es un atributo del mismo. El radio se establece a través de un constructor o a través del método setRadio.

Si escribes radio = radio*radio; estás diciendo que el radio es igual al resultado de multiplicar el radio por sí mismo. Esto no tiene sentido, no debemos usarlo porque crea confusión: el radio es el que es, no es el resultado de multiplicarlo por sí mismo. Además con esta sentencia estás cambiando el valor del atributo, algo que no debe hacerse excepto a través del método set.

Debes corregir esto

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