Autor Tema: CU00673B static, final en Java (palabras clave). Variables de clase o campos est  (Leído 3735 veces)

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
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

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
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
« Última modificación: 31 de Marzo 2015, 16:22 por Lorenzo31 »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2662
    • Ver Perfil
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

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
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.

 

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