Hola, tienes razón en que el código tal y como está da lugar a un error.
Sobre el código que has puesto te haría las siguientes observaciones:
a) Has creado un método que se denomina Edad que no recibe parámetros. La clase carece de constructor. La clase tiene un atributo o variable denominada Edad que no se inicializa, por eso el valor inicial de la variable Edad es cero y cada vez que tratas de ejecutar el método te aparece siempre el mismo mensaje.
Para corregir esto en primer lugar es recomendable no poner a un método el mismo nombre que la clase, ese nombre debe quedar reservado para el constructor. En el constructor lo que se hace es inicializar los atributos de la clase. Por tanto deberías poner un constructor donde pida un parámetro que sea la edad, de modo que puedas establecer la edad que tú quieras y que no siempre valga cero. El código quedaría así:
//Ejemplo de metodo switch
public class Edad{
private int edad;
public Edad (int edadRecibida) {
edad = edadRecibida;}
public void dimeSiEdadEsCritica(){
switch(edad){
case 0:
System.out.println("Acaba de nacer hace poco. No ha cumplido el año.");
break;
case 18:
System.out.println("Esta justo en la mayoria de edad.");
break;
case 65:
System.out.println("Esta en la edad de jubilacion.");
break;
default:
System.out.println("La edad no es critica.");
break;
}
}
}
Ahora tendrías que crear un objeto y como el constructor requiere un parámetro, te pedirá que indiques new Edad ( ... ) , ahí escribe un número por ejemplo 65 y pulsa ok. Ahora ejecuta el método void dimeSiEdadEsCritica() y deberá aparecerte el mensaje "Está en la edad de jubilación". Este objeto siempre te devolverá el mismo mensaje porque la edad está fijada en un valor, si quisieras ver otro mensaje tendrías que crear otro objeto.
Para hacer que el método funcione tendríamos más opciones, te voy a indicar dos más. La primera sería declarar el método dentro de una clase donde uno de sus atributos sea una variable de tipo entero denominada edad. Dentro de la clase creamos un método denominado setEdad que nos permita introducir una edad. Finalmente, crearíamos el objeto de la clase, estableceríamos la edad con el método setEdad y luego llamaríamos al método dimeSiEdadEsCritica para obtener un resultado. El código sería este:
public class testSwitch {
// Atributos de clase
private int edad;
//Constructor
public testSwitch() { }
public void setEdad(int edadRecibida) { edad = edadRecibida;}
/* Ejemplo método que usa switch - aprenderaprogramar.com */
public void dimeSiEdadEsCritica() {
switch (edad) {
case 0:
System.out.println ("Acaba de nacer hace poco. No ha cumplido el año");
break;
case 18: System.out.println ("Está justo en la mayoría de edad"); break;
case 65: System.out.println ("Está en la edad de jubilación"); break;
default: System.out.println ("La edad no es crítica"); break;
}
}
}
Con el código anterior puedes cambiar la edad tantas veces como quieras utilizando el método setEdad y luego visualizar el mensaje que corresponda utilizando el método dimeSiEdadEsCritica()
La otra opción sería modificar el método para que lleve un parámetro edad de forma que cada vez que ejecutes el método te pida el parámetro. El código quedaría así:
public class testSwitch {
// Atributos de clase
//Constructor
public testSwitch() { }
/* Ejemplo método que usa switch - aprenderaprogramar.com */
public void dimeSiEdadEsCritica(int edad) {
switch (edad) {
case 0:
System.out.println ("Acaba de nacer hace poco. No ha cumplido el año");
break;
case 18: System.out.println ("Está justo en la mayoría de edad"); break;
case 65: System.out.println ("Está en la edad de jubilación"); break;
default: System.out.println ("La edad no es crítica"); break;
}
}
}
De cualquiera de estas maneras debería funcionarte. No hay una manera mejor que otra, simplemente debe comprenderse en qué consiste cada opción.
Prueba las distintas formas a ver si te funcionan y ya me comentas si tienes algún problema. Saludos.