Foros aprenderaprogramar.com
Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Jorge lopez en 09 de Agosto 2014, 06:27
-
Pregunta: ¿Es posible crear un método en la clase Circulo para establecer el valor de numeroPi? ¿Por qué?
Respuesta: No, no es posible debido a que numeroPi en el código al que referencia es una constante y no una variable.
public class CalculadoraMedidasCirculo
import javax.swing.*;
public class CalculadoraMedidasCirculo
{
static final Circulo circunferencia = new Circulo();/*digamos que final protege de una posible reasignacion de valor a circunferencia, por ejemplo:
supongamos que la clase Circulo cuenta con un constructor con parámetros, circunferencia = new Circulo(double parametro)*/
static JOptionPane mensaje = new JOptionPane();
public void CalculadoraMedidasCirculo()
{
}
public static void main(String []args)
{
boolean finalizado = false;
while(finalizado == false)
{
String stringRadio = mensaje.showInputDialog(null, "Introduce el radio del circulo", "Area, Longitud y Diametro de un circulo", 3);
double radio = Double.valueOf(stringRadio);
circunsferencia.setRadio(radio);
mensaje.showMessageDialog(null, "________________________________________\nArea = "
+ circunsferencia.areaCirculo() + "\n________________________________________"
+"\nLongitud = " + circunsferencia.longitudCirculo() + "\n________________________________________"
+ "\nDiametro = " + circunsferencia.diametroCirculo() + "\n________________________________________", "Resultados!", 1);
int volver = mensaje.showConfirmDialog(null,"Deseas calcular el Area, Longitud y Diámetro de otro circulo?","Confirmar",0);
if(volver == 0)
{
finalizado = false;
}
else if(volver == 1)
{
finalizado = true;
}
}
//circunsferencia = new Circulo(2.5); error por circunferencia estar declarada como constante (final).
mensaje = new JOptionPane(" "); //Compila por mensaje ser una variable y no una constante, independientemente de que esta sea static o no.
}
}
public class Circulo
public class Circulo
{
private static final double NUMERO_PI = 3.1416;
private static double radio;
//Constructor general
public Circulo()
{
radio = 0.0;
}
//Constructor con parámetros
public Circulo(double radio)
{
this.radio = radio;
}
//setter
public void setRadio(double radio)
{
this.radio = radio;
}
//getter
public double getRadio()
{
return radio;
}
//otros metodos
public double areaCirculo()
{
return NUMERO_PI*(radio*radio);
}
public double longitudCirculo()
{
return (2*NUMERO_PI)*radio;
}
public double diametroCirculo()
{
return radio*2;
}
}
Saludos!
-
Nota: sustituir la constante "circunsferencia" dentro del bucle while, por la constante "circunferencia" en la clase CalculadoraMedidasCirculo para evitar error en compilación (me descuide con el auto corrector ;D) , esperando comentarios.
Saludos!
-
Esta bien! Una recomendación, si solo vas a usar el JOptionPane del paquete swing, importa solo ese objeto asi:
import javax.swing.JOptionPane;
ya que como haces tu:
import javax.swing.*;
Estas importando todo esto:
http://docs.oracle.com/javase/7/docs/api/javax/swing/package-summary.html (http://docs.oracle.com/javase/7/docs/api/javax/swing/package-summary.html)
y si te fijas, son muchísimas y mas cosas que no estas usando...
Aparte de esto, no se porque declaras el circulo de la clase CalculadoraMedidasCirculo, lo declaras como una constante...
static final Circulo circunferencia = new Circulo();
En fin, no esta mal, pero en la clase del main, creo que te has complicado la vida añadiéndole atributos y constructores, no creo que esto sea necesario según lo que pide el ejercicio.
Pero vamos la cosa es que funciona, y si tu sabes todo lo que has echo y porque lo has echo así, pues muy bien.
Por cierto: en la clase Math.PI, tienes la constante pi con mas decimales. jeje
-
Aparte de esto, no se porque declaras el circulo de la clase CalculadoraMedidasCirculo, lo declaras como una constante...
Al igual que declare los atributos y el constructor de la clase con el main, también declare circunferencia como constante, a modo de ejemplo para ilustrar cuando se puede y cuando no, reasignar un valor a un campo de clase, por ejemplo: la clase Circulo cuenta con 2 constructores diferentes, en la clase con main declaro: static final Circulo circunferencia = new Circulo();con lo que mas adelante en el código con el main, no podría hacer algo como: circunferencia = new Circulo(//Constructor con parámetros de la clase Circulo);en realidad no hay nada de funcionalidad positiva en esto en cuanto a la eficiencia del codigo, mas bien es un ejemplo, pero lo hice consientemente.
Saludos y gracias otra vez por revisar dongo.
-
Hola sniper, he revisado el código y veo buenas cosas, entre ellas mejoras que has introducido por tu cuenta, interfaz gráfica, etc. Si tuviera que decirte algo a mejorar: el diseño o concepción del código, cosas que ya se han comentado en el hilo, pero que deberías tener en cuenta cuando crees código.
En la clase Circulo: private static double radio; ¿Para qué static?
En la clase CalculadoraMedidasCirculo:
static final Circulo circunferencia = new Circulo();
static JOptionPane mensaje = new JOptionPane();
¿Para qué tener esto como atributos de la clase? La clase con el método main se encarga de dirigir el código y la interacción entre objetos. ¿Para qué necesitas que lleve estos atributos?
Estas preguntas no te las hago con el fin de que respondas, creo que ya has respondido... sino con el fin de que lo tengas en cuenta cuando crees código con el fin de que logres mejorar los diseños.
Saludos