Autor Tema: Ejercicio! entrega CU00673B constantes de clase java  (Leído 4462 veces)

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Ejercicio! entrega CU00673B constantes de clase java
« 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
Código: [Seleccionar]
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
Código: [Seleccionar]

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!
« Última modificación: 31 de Agosto 2014, 10:56 por Alex Rodríguez »
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Corrección!
« Respuesta #1 en: 09 de Agosto 2014, 18:48 »
 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!
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

dongo

  • Intermedio
  • ***
  • Mensajes: 177
    • Ver Perfil
Re:Ejercicio! entrega CU00673B
« Respuesta #2 en: 09 de Agosto 2014, 20:56 »
Esta bien! Una recomendación, si solo vas a usar el JOptionPane del paquete swing, importa solo ese objeto asi:

Código: [Seleccionar]
import javax.swing.JOptionPane;

ya que como haces tu:

Código: [Seleccionar]
import javax.swing.*;

Estas importando todo esto:

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

Código: [Seleccionar]
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
 
« Última modificación: 09 de Agosto 2014, 21:00 por dongo »

Jorge lopez

  • Sniper
  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 248
  • @SniperOfElite
    • Ver Perfil
Re:Ejercicio! entrega CU00673B
« Respuesta #3 en: 10 de Agosto 2014, 00:16 »
Citar
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:
Código: [Seleccionar]
static final Circulo circunferencia = new Circulo();con lo que mas adelante en el código con el main, no podría hacer algo como:
Código: [Seleccionar]
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.
while(estesVivo)
{
  aprende();
  ayuda();
  enseña();
}
if(mueres){teRecordaran();}

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Re:Ejercicio! entrega CU00673B
« Respuesta #4 en: 10 de Agosto 2014, 19:12 »
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

 

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