Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: matru en 15 de Marzo 2016, 22:50

Título: Java manipulación indebida de atributos desde métodos error de concepto CU00673B
Publicado por: matru en 15 de Marzo 2016, 22:50
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.


Título: Re:Java manipulación indebida de atributos desde métodos error de concepto CU00673B
Publicado por: Mario R. Rancel en 17 de Marzo 2016, 09:52
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