Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Lorenzo31 en 31 de Marzo 2015, 00:36
-
Buenas, dejo aquí la respuesta a mi ejercicio
Clase Circulo
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
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
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
-
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
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
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
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
-
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
-
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.