Autor Tema: static, final en Java Variables de clase Campos estáticos y constantes CU00673B  (Leído 2407 veces)

micaelasol

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 33
    • Ver Perfil
Aquí está mi propuesta del ejerccio CU00673B del taller de programación Java desde cero de aprenderaprogramar:

Citar
Define una clase Java denominada Circulo que tenga como atributo de clase (estático) y constante numeroPi, siendo esta constante de tipo double y valor 3.1416. Además la clase tendrá el atributo radio (tipo double) que representa el radio del círculo, y los métodos para obtener y establecer los atributos. También debe disponer de un método para calcular el área del círculo (método tipo funcion areaCirculo que devuelve el área) y la longitud del círculo (método tipo función que devuelve la longitud). Busca información sobre las fórmulas necesarias para crear estos métodos en internet si no las recuerdas. En una clase con el método main, declara el código que cree un objeto círculo, le pida al usuario el radio y le devuelva el área y la longitud del círculo.

Código: [Seleccionar]
public class Circulo {
    public static final double numeroPi = 3.1415;
    public double radio;
   
    public void setRadio (double valorRadio){
        radio = valorRadio;
    }
   
    public double getNumeroPi () {return numeroPi;}
   
    public double getRadio () {return radio;}
   
    public double areaCirculo(){
        double area = 0.0;
        area = numeroPi * (radio * radio);
        System.out.println("El area es: " + area + " cm");
        return area;
    }
   
    public double longitudCirculo(){
        double longitud = 0.0;
        longitud = 2 * numeroPi * radio;
        System.out.println("La longitud es: " + longitud + " c");
        return longitud;
    }
}


Código: [Seleccionar]
import java.util.Scanner;
public class testCirculo {
   
    public static void main (String [] args){       
        System.out.println("Ingrese el radio del circulo");
        Circulo circulo = new Circulo();
        double radioEntrada = 0.0;
        Scanner entradaTeclado = new Scanner(System.in);
        String entradaEscaner= entradaTeclado.nextLine();
        radioEntrada = Double.valueOf(entradaEscaner);
        circulo.setRadio(radioEntrada);
        System.out.println(circulo.areaCirculo());
        System.out.println(circulo.longitudCirculo());       
    }
}


Y mi respuesta a la pregunta:

Citar
¿Es posible crear un método en la clase Circulo para establecer el valor de numeroPi? ¿Por qué?

No, no es posible ya que al numeroPi no ser una variable, sino una constante, no se puede crear un método para establecer su valor. De antemano ya se la definió al iniciarla.

Muchas gracias
« Última modificación: 19 de Agosto 2022, 19:45 por Alex Rodríguez »

Kabuto

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 989
    • Ver Perfil
Todo parece correcto, solo cambiaría dos detalles.

El modificador de acceso de los atributos, por norma general, siempre los vamos a declarar como private, no como public

Citar
public class Circulo {
    public static final double numeroPi = 3.1415;
    public double radio;

Habrá situaciones en que resulte más óptimo declararlos como public o como protected(algo a medio camino entre publico y privado).
Pero por lo general los declararemos como privados siempre, y luego si el desarrollo del programa lo exigiese, pues ya cambiaremos el nivel de acceso.


Otra cosa, si un método retorna un valor, pues seguramente no vamos a necesitar que sea el propio método quien lo muestren en pantalla.

Citar
    public double areaCirculo(){
        double area = 0.0;
        area = numeroPi * (radio * radio);
        System.out.println("El area es: " + area + " cm");
        return area;
    }

Y si vamos a hacer que el método lo imprima en pantalla, entonces cuando lo invoquemos en el programa principal, no conviene llamarlo dentro de un System.out.println()
Código: [Seleccionar]
System.out.println(circulo.areaCirculo());Porque eso va a hacer que el valor del area salga en pantalla dos veces: una por el println() que ya tiene el propio método y otra porque el area retornada va a ser impresa por el println() del programa principal.

Si nuestro método ya incorpora un println(), basta con invocarlo directamente en el programa principal, no hace falta ponerlo dentro de otro println()
Código: [Seleccionar]
circulo.areaCirculo();
Pero vamos, lo normal es que si el método retorna el valor, no tenga su propio println().
Citar
    public double areaCirculo(){
        double area = 0.0;
        area = numeroPi * (radio * radio);
        System.out.println("El area es: " + area + " cm");
        return area;
    }


 Si no que será el programa principal quien se ocupe de imprimir en pantalla el valor retornado:
Código: [Seleccionar]
System.out.println("El area es: " + circulo.areaCirculo() + " cm");

Espero haberme explicado bien y no haber liado más las cosas.
Como digo, son detalles, por lo demás el ejercicio parece correcto. :D
Un saludo.
NO respondo dudas por mensaje privado
Publicando vuestras dudas en el foro público conseguimos:
- Que más gente aporte respuestas mejores o complementarias.
- Que otras personas puedan aprender de vuestras dudas.

Mejor en PÚBLICO que en privado. Gracias

 

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