Hola, soy nuevo aqui y estoy estudiando Java, aunque por ahora la verdad es que me esta costando. Estoy tratando de lograr crear un programa que controla que solo introduces valores ya fijados en un enumerado, pero no lo consigo. Os cuento lo que quiero decir mostrando el codigo.
Casa.java
public class Casa {
String color;
public String getColor() {
return this.color;
}
public void setColor(String color) {
this.color = color;
}
public Casa() {
color = "Rojo";
}
public Casa(String color) {
this.color = color;
}
public String toString(){
return "La casa está pintada de color "+ this.color;
}
}
CambiarColorCasa.java
/**
* En esta clase principal, quiero declarar un enumerado con los valores BLANCO,
* AZUL y VERDE, que son los valores que puede admitir el atributo del color de la casa.
* De forma que tras recoger el color por el usuario, el programa debe valerse de ese
* enumerado para comprobar si es un color válido.
*
*/
public class CambiarColorCasa {
public enum Colores {BLANCO, AZUL, VERDE};
public static void main(String[] args) {
Casa casaPintada = null;
Casa casaSinPintar = null;
String color2;
int eleccion;
String respuesta;
do {
Mensajes.msgln("\t\t1.- Crear una casa sin pintar.");
Mensajes.msgln("\t\t2.- Crear una casa pintada.");
Mensajes.msgln("\t\t3.- Pinta la casa");
Mensajes.msgln("\t\t4.- Muestra el color de la casa\n");
Mensajes.msgln("\t\t0.- Salir de la aplicación.");
Mensajes.msgln("\t=========================================================\n");
eleccion = Mensajes.leeEntero("\tIntroduzca la opción elegida:", 0, 4);
switch (eleccion) {
case 0:
Mensajes.msgln("\tCerrando...");
break;
case 1:
casaSinPintar = new Casa();
Mensajes.msgln("\tSe creó una casa sin pintar. \n"
+ "\tDeberás pintarla. \n");
break;
case 2:
color2 = Mensajes.leeCadena("\tIntroduce el color: ");
casaPintada = new Casa(color2);
Mensajes.msgln("\t Se creó una casa pintada.\n");
break;
case 3:
if (casaSinPintar != null) {
color2 = Mensajes.leeCadena("\tIntroduzca un nuevo color: ");
if (casaSinPintar.getColor().equals("Rojo")) {
casaSinPintar.setColor(color2);
Mensajes.msgln("\n\tLa casa esta pintada de nuevo ");
} else {
respuesta = Mensajes.leeCadena("\n\tEl color actual es: " + casaSinPintar.getColor()
+ ". ¿Desea cambiarlo? (S/N): ");
if (respuesta.equalsIgnoreCase("s")) {
casaSinPintar.setColor(color2);
Mensajes.msgln("\n\tEl color ahora es " + casaSinPintar.getColor() + ".\n ");
} else {
Mensajes.msgln("\n\tCambio de color cancelado.");
}
}
} else {
Mensajes.msgln("No existe la casa.");
}
break;
case 4:
Mensajes.msgln("Casa sin pintar");
if (casaSinPintar == null)
Mensajes.msgln("No hay datos aún");
else
System.out.println(casaSinPintar.toString());
Mensajes.msgln("Casa pintada");
if (casaPintada == null)
Mensajes.msgln("No hay datos aún");
else
System.out.println(casaPintada.toString());
break;
default:
break;
} // Switch
} while (eleccion
!= 0);
}//Fin del main
}//Fin de la clase
Mensajes.java
import java.util.Scanner;
public class Mensajes {
public static int leeEntero(String mensaje, int minimo, int maximo) throws IllegalArgumentException {
int numero = 0;
boolean leido = false;
Scanner teclado = null;
if (minimo <= maximo) {
do {
Mensajes.msgln(mensaje);
try {
teclado = new Scanner(System.in);
numero = teclado.nextInt();
if (numero >= minimo && numero <= maximo) {
leido = true;
} else {
Mensajes.msgln("Error: Debe ser un número entero mayor o igual que " + minimo + " y menor o igual que " + maximo + ". ");
}
} catch (Exception e) {
Mensajes.msgln("Error: No es un número entero válido. ");
}
} while (!leido);
} else {
throw new IllegalArgumentException("Error");
}
return numero;
}
public static String leeCadena() {
Scanner teclado = new Scanner(System.in);
String cadena = "";
try {
cadena = teclado.nextLine();
} catch (Exception e) {
Mensajes.msgln("Error.");
}
return cadena;
}
public static String leeCadena(String mensaje) {
Scanner teclado = new Scanner(System.in);
String cadena = "";
try {
Mensajes.msgln(mensaje);
cadena = teclado.nextLine();
} catch (Exception e) {
Mensajes.msgln("Error.");
}
return cadena;
}
public static void msg(String cadenaAImprimir) {
System.out.print(cadenaAImprimir);
}
public static void msgln() {
System.out.println();
}
public static void msgln(String cadenaAImprimir) {
System.out.println(cadenaAImprimir);
}
}
El problema lo tengo en CASE 3. El programa funciona pero no controlo que los valores introducidos sean los declarados en el enumerado, que es justo lo que trato de hacer pero no se como. Me he leído la parte del curso dedicada a los enumerados y no he encontrado que se usen para controlar que escribes uno de los valores declarados.
Cualquier ayuda es bienvenida, gracias!