Autor Tema: CU00681B ejemplo enum java tipos enumerados types must not be local  (Leído 2458 veces)

Jarper

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 20
    • Ver Perfil
Buenos días,

 EJERCICIO

Crea una clase Vehiculo donde definas un tipo enumerado MarcaDeVehiculo cuyos valores posibles serán FORD, TOYOTA, SUZUKI, RENAULT, SEAT. Establece como atributos de la clase matricula (tipo String) y marca (tipo MarcaDeVehiculo) y crea los métodos getters (para obtener) y setters (para establecer el valor) de los atributos. Escribe un pequeño programa de prueba donde verifiques que los métodos funcionan correctamente. Puedes comprobar si tu código es correcto consultando en los foros aprenderaprogramar.com.

He realizado el siguiente código:
Código: [Seleccionar]
enum MarcaDeVehiculo{FORD,TOYOTA,SUZUKI,RENAULT,SEAT};
public class Vehiculo
{
    private String matricula;
    private MarcaDeVehiculo marca;
    public Vehiculo(){
        matricula="";
        setMarca();
    }
    public void setMarca(){
        String texto = "";
        System.out.println("Por favor introduzca la marca del vehículo, debe ser [Ford, Toyota, Suzuki, Renault, Seat] en minúsculas.");
        Scanner entradaTeclado = new Scanner(System.in);
        texto = entradaTeclado.nextLine();
        if(texto.equals("ford")){
            marca = MarcaDeVehiculo.FORD;
        }
        else if(texto.equals("toyota")){
            marca = MarcaDeVehiculo.TOYOTA;
        }
        else if(texto.equals("suzuki")){
            marca = MarcaDeVehiculo.SUZUKI;
        }
        else if(texto.equals("renault")){
            marca = MarcaDeVehiculo.RENAULT;
        }
        else if(texto.equals("seat")){
            marca = MarcaDeVehiculo.SEAT;
        }
        else{
            System.out.println("No ha introducido una marca válida para el vehículo.");
        }
    }
   
    public void setMatricula(String valorMatricula){
        matricula = valorMatricula;
    }
    public MarcaDeVehiculo getMarca(){
        return marca;
    }
    public String getMatricula(){
        return matricula;
    }
}
No he sabido establecer un valor a marca en el constructor(no quería asignar un valor de los que aparecen en la lista de tipo enum) por lo que he puesto una llamada al setter de marca. No se si es correcto realizar un setter sin ningún parámetro y tampoco se si es muy adecuado realizar los condicionales tal que así.

El código para la prueba es el siguiente:
Código: [Seleccionar]
public class TestVehiculo
{
   public static void main(String[] args){
       Vehiculo nuevoVehiculo = new Vehiculo();
       String valorMatricula = "MXC-1234-E";
       nuevoVehiculo.setMatricula(valorMatricula);
       System.out.println("La marca del vehículo es: "+nuevoVehiculo.getMarca());
       System.out.println("La matrícula del vehículo es: "+nuevoVehiculo.getMatricula());
       nuevoVehiculo.setMarca();
       System.out.println("La nueva marca del vehículo es: "+nuevoVehiculo.getMarca());
       
    }
}

Muchas gracias, atentamente.

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Re:CU00681B ejemplo enum java tipos enumerados types must not be local
« Respuesta #1 en: 22 de Enero 2015, 23:51 »
Hola Jarper.

Para asignar un valor en el constructor al atributo marca, puedes hacer tres cosas:
1ª marca = MarcaDeVehiculo.FORD;
o
2ª marca = null;
o también, añades una marca en tu tipo enumerado que no usarás más que para esto
3ª marca = MarcaDeVehiculo.SIN_MARCA;

La segunda opción tiene el pequeño inconveniente de con este atributo lo primero que has de hacer es asignarle un valor con su setter, porque si lo primero que haces es tomar su valor con el getter, al trabajar con ese valor, tu programa te marcará errores pues no se trabaja con valores null.

En cuanto al setter del atributo marca, lo correcto es como tu suponías hacerlo tan sencillo como los otros:

public void setMarca (MarcaDeVehiculo valorMarca) {
    marca = valorMarca;
}

Y a este método lo invocarás así por ejemplo:

setMarca (vehiculo1.getMarca());
o
setMarca (seleccionaMarca());

donde el método seleccionaMarca es todo el código que has puesto en el setter, pero en lugar de modificar el atributo marca en el if, hacer un return con la marca seleccionada.

Código: [Seleccionar]
    public MarcaDeVehiculo seleccionaMarca(){
        String texto = "";
        System.out.println("Por favor introduzca la marca del vehículo, debe ser [Ford, Toyota, Suzuki, Renault, Seat] en minúsculas.");
        Scanner entradaTeclado = new Scanner(System.in);
        texto = entradaTeclado.nextLine();
        if(texto.equals("ford")){
            return MarcaDeVehiculo.FORD;
        }
        else if(texto.equals("toyota")){
            return MarcaDeVehiculo.TOYOTA;
        }
        else if(texto.equals("suzuki")){
            return MarcaDeVehiculo.SUZUKI;
        }
        else if(texto.equals("renault")){
            return  MarcaDeVehiculo.RENAULT;
        }
        else if(texto.equals("seat")){
            return  MarcaDeVehiculo.SEAT;
        }
        else{
            System.out.println("No ha introducido una marca válida para el vehículo. Se ha asignado un valor nulo");
            return null;
        }
    }
Y así funcionará sobre ruedas. 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".