Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Lorenzo31 en 31 de Marzo 2015, 00:36

Título: CU00673B static, final en Java (palabras clave). Variables de clase o campos est
Publicado por: Lorenzo31 en 31 de Marzo 2015, 00:36
Buenas, dejo aquí la respuesta a mi ejercicio

Clase Circulo
Código: [Seleccionar]
public class Circulo{
   
    private static final double NUMEROPI = 3.1416; //En mayuscula porque es final, no se puede modificar
    private double radio;
   
    public Circulo(){ //constructor inicializo y asigno valor a radio;
        radio = 0.0; }
   
    //Setter   
    public void setRadio(double valorRadio){
        radio = valorRadio; }
    //Getters
        public double getRadio(){ return radio; }
    public double getNumeroPi(){ return NUMEROPI; }
    // Funcion que devuelve el area del circulo
    public double areaCirculo(){ return NUMEROPI * (radio * radio); }
    //Funcion que devuelve longitud del circulo
    public double longitudCirculo(){ return 2*NUMEROPI*radio; }
}

Clase EntradaDatos

Código: [Seleccionar]
import java.util.Scanner;
import java.util.InputMismatchException;

public class EntradaDatos{
    private double numero = 0;

    public EntradaDatos(){ /*vacio*/ } //constructor

    public void entradaDouble(){ //recoger el double por Scanner
        do{
            try{
                Scanner entrada = new Scanner(System.in);
                numero = entrada.nextDouble();
            }catch (InputMismatchException e){ System.out.println("Debes introducir un numero para el radio");}
        }while(numero == 0);
    }

    public int entradaEntero(){
        int opcion = 0; 
        do{
            try{
                Scanner entrada = new Scanner(System.in);
                opcion = entrada.nextInt();
            }catch(InputMismatchException e){ System.out.println("Debes introducir un numero del 1 al 3");}
        }while(opcion < 1 && opcion >3);
        return opcion;
    }

    //getter
    public double getDouble(){ return numero;}
}// cierre clase

Clase OperacionesCirculo

Código: [Seleccionar]
public class OperacionesCirculo{

    public static void main (String[] args){
        boolean salida = false;
        Circulo circunferencia = new Circulo();  //creo el nuevo Circulo

        System.out.println("Por favor introduce el radio de la circunferencia");

        EntradaDatos entrada = new EntradaDatos(); //pido datos con nuevo EntradaDatos
        entrada.entradaDouble();
        circunferencia.setRadio(entrada.getDouble()); //hacemos un setRadio para pasar el valor a instancia de clase Circulo

        //menu que mientras no se seleccione CASE 3 no pondra en true el boolean salida
        while(salida == false){
            System.out.println(" \n 1.- Dar Area Circulo \n 2.- Dar Longitud del Circulo \n 3.-Salir ");
            switch (entrada.entradaEntero()){
                case 1: System.out.println("\n El area del circulo es " + circunferencia.areaCirculo()); break;
                case 2: System.out.println("\n La longitud del circulo es " + circunferencia.longitudCirculo()); break;
                case 3: salida = true; break;
            } //cierre switch
        } //cierre while
        System.out.println("Final del programa");
    }//cierre main
}//cierre clase
Título: Re:CU00673B static, final en Java (palabras clave). Variables de clase o campos est
Publicado por: Lorenzo31 en 31 de Marzo 2015, 16:15
Dejo una version que basicamente en el main añade una opcion para cambiar de nuevo el radio sin tener que terminar el programa y reiniciarlo. Algun cambio más para adaptarlo pero poca cosa.

Sobre todo por si algo de lo que hago es mejorable, tengo en cuenta todos los comentarios y consejos siempre.

Clase EntradaDatos

Código: [Seleccionar]
import java.util.Scanner;
import java.util.InputMismatchException;

public class EntradaDatos{
    private double numero = 0;

    public EntradaDatos(){ /*vacio*/ } //constructor

    public void entradaDouble(){ //recoger el double por Scanner
        numero = 0;
        do{
            try{
                Scanner entrada = new Scanner(System.in);
                numero = entrada.nextDouble();
            }catch (InputMismatchException e){ System.out.println("Debes introducir un numero para el radio");}
        }while(numero == 0);
    }

    public int entradaEntero(){
        int opcion = 0; 
        do{
            try{
                Scanner entrada = new Scanner(System.in);
                opcion = entrada.nextInt();
            }catch(InputMismatchException e){ System.out.println("Debes introducir un numero del 1 al 4");}
        }while(opcion < 1 && opcion >4);
        return opcion;
    }

    //getter
    public double getDouble(){ return numero;}
}// cierre clase

Clase Circulo

Código: [Seleccionar]
public class Circulo{
   
    private static final double NUMEROPI = 3.1416; //En mayuscula porque es final, no se puede modificar
    private double radio;
   
    public Circulo(){ //constructor inicializo y asigno valor a radio;
        radio = 0.0; }
   
    //Setter   
    public void setRadio(double valorRadio){
        radio = valorRadio; }
    //Getters
        public double getRadio(){ return radio; }
    public double getNumeroPi(){ return NUMEROPI; }
    // Funcion que devuelve el area del circulo
    public double areaCirculo(){ return NUMEROPI * (radio * radio); }
    //Funcion que devuelve longitud del circulo
    public double longitudCirculo(){ return 2*NUMEROPI*radio; }
}

Clase OperacionesCirculo

Código: [Seleccionar]
public class OperacionesCirculo{

    public static void main (String[] args){
        boolean salida = false;
        Circulo circunferencia = new Circulo();  //creo el nuevo Circulo

        System.out.println("Por favor introduce el radio de la circunferencia");

        EntradaDatos entrada = new EntradaDatos(); //pido datos con nuevo EntradaDatos
        entrada.entradaDouble();
        circunferencia.setRadio(entrada.getDouble()); //hacemos un setRadio para pasar el valor a instancia de clase Circulo

        //menu que mientras no se seleccione CASE 3 no pondra en true el boolean salida
        while(salida == false){
            System.out.println("\n 1.- Introducir Nuevo Radio del Circulo \n 2.- Dar Area Circulo \n 3.- Dar Longitud del Circulo \n 4.-Salir ");
            switch (entrada.entradaEntero()){
                case 1: System.out.println("Por favor introduce el radio de la circunferencia"); entrada.entradaDouble(); circunferencia.setRadio(entrada.getDouble()); break;
                case 2: System.out.println("\n El area del circulo es " + circunferencia.areaCirculo()); break;
                case 3: System.out.println("\n La longitud del circulo es " + circunferencia.longitudCirculo()); break;
                case 4: salida = true; break;
            } //cierre switch
        } //cierre while
        System.out.println("Final del programa");
    }//cierre main
}//cierre clase
Título: Re:CU00673B static, final en Java (palabras clave). Variables de clase o campos est
Publicado por: Ogramar en 01 de Abril 2015, 10:13
Hola Lorenzo, el código en general está bastante bien, lo que te recomendaría es que te acostumbres a usar nombres lo más correctos posibles como lo hacen los programadores experimentados, cuanto antes te vayas acostumbrando mejor. En la clase Circulo los nombres de los métodos areaCirculo y longitudCirculo serían más descriptivos si se nombraran como getAreaCirculo u obtenerAreaCirculo y getLongitudCirculo u obtenerLongitudCirculo, así describes mejor lo que hace el método (es cierto que el propio enunciado dice como nombre areaCirculo, pero todo lo que se pueda mejorar...)

Salu2
Título: Re:CU00673B static, final en Java (palabras clave). Variables de clase o campos est
Publicado por: Lorenzo31 en 01 de Abril 2015, 14:28
Entendido, gracias por el consejo Ogramar, entiendo que para hacerlos mas legibles los metodos deben explicar que hacen o retornan.

Tomo nota y lo tendré presente en el futuro.