Autor Tema: Ejemplo tipos enumerados y valueof Java Ejercicio CU00681B del curso public enum  (Leído 3909 veces)

el_calderas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 43
    • Ver Perfil
Hola,
os dejo para que comprobeis mi respuesta a este ejercicio.
He utilizado la clase vehiculo y la clase EntradaDeTeclado, de otros ejercicios.

Código: [Seleccionar]
public class Vehiculo
{
    public enum MarcaDeVehiculo {FORD, TOYOTA, SUZUKI, RENAULT, SEAT};
    private String matricula;
    private MarcaDeVehiculo marca;

    public Vehiculo(){
    }

    public void setMatricula(String matricula){
        this.matricula=matricula;
    }

    public String getMatricula(){
        return this.matricula;
    }

    public void setMarca(MarcaDeVehiculo marca){
        this.marca=marca;
    }

    public MarcaDeVehiculo getMarca(){
        return marca;
    }

    public boolean comprobarMarca(){
        boolean done=true;
        marca=MarcaDeVehiculo.FORD;//se crea el objeto MarcaDeVehiculo
        EntradaDeTeclado entrada1=new EntradaDeTeclado();//se introduce una marca de coche
        for(MarcaDeVehiculo aux:marca.values()){
            if(entrada1.getEntrada().toString().equals(aux.toString().toLowerCase())){
                this.marca=aux; //La marca introducida se asigna a la variable marca.
                return done;
            }
        }
        return done=false;
    }

}

Código: [Seleccionar]
import java.util.Scanner;

public class EntradaDeTeclado
{
    private String entradaTeclado; //variable de instancia(campo) de ´la clase
   
    public EntradaDeTeclado(){ //constructor
        entradaTeclado=""; //inicializamos la instancia de la clase
        pedirEntrada(); // Esto es una llamada a un método interno. Al crear un objeto automaticamente, ejecutamos el metodo
    }
   
    public void pedirEntrada(){ //metodo de la clase
        Scanner entradaEscaner=new Scanner(System.in);
        entradaTeclado=entradaEscaner.nextLine();
    }
   
    public String getEntrada(){
        return entradaTeclado;
    }
       
 }

Código: [Seleccionar]
public class TestTipoEnum
{
    public static void main(String[] Args){
        Vehiculo.MarcaDeVehiculo marca=Vehiculo.MarcaDeVehiculo.SEAT;
        //marca=MarcaDeVehiculo.SEAT;//¿siempre hay que declarar el tipo dandole un valor?
        Vehiculo coche=new Vehiculo();

        System.out.println("Iniciamos el test\nIntroduce una de estas marca de coche");
        for(Vehiculo.MarcaDeVehiculo aux:marca.values()){
            System.out.println(aux.toString() + "\t");
        }


        while(!coche.comprobarMarca()){ //se comprueba que la marca de coche sea correcta
            System.out.println("la marca introducida no es correcta, vuelve a intentarlo");
        }

        System.out.println("Ahora introduce una matricula");
        EntradaDeTeclado entrada2=new EntradaDeTeclado();

        coche.setMatricula(entrada2.getEntrada());
        System.out.println("la marca que has elegido es " + coche.getMarca().toString() + " y su matricula es " + coche.getMatricula() );
       
    }

}

Ahora unas preguntas:
- ¿siempre que se cree un tipo enumerado hay que asignarle un valor de los que posee el enumerado?

- ¿porque, a pesar de utilizar \t para escribir la lista de marcas del enumerado, las marcas salen una debajo de otra y no una al lado de la otra, como esperaba?

Muchas gracias por vuestra ayuda y consejos.
Un saludo.
« Última modificación: 07 de Mayo 2015, 09:33 por Alex Rodríguez »

Lorenzo31

  • Avanzado
  • ****
  • APR2.COM
  • Mensajes: 381
    • Ver Perfil
Re:Ejercicio CU00681B Tipos Enumerados
« Respuesta #1 en: 06 de Mayo 2015, 20:05 »
BUenas tardes, empiezo por el final, respondiendo a tus preguntas.

Sí, siempre han de ser valores declarados en los enum.

La razón por la que te salta igualmente de linea es porque usas Sistem.out.println, done ln equivale a salto de linea.

Si quieres que no salte la linea usa Sistem.out.print


Sobre el ejercicio esta correcto, sobre el código para comprobar marca (que lo has resuelto bien), echale un vistazo a ValueOf para enum. Si no esta dentro de los valores descritos no lo acepta directamente.

Una cosa, no importante un matiz, en el método

Código: [Seleccionar]
public boolean comprobarMarca(){
        boolean done=true;
        marca=MarcaDeVehiculo.FORD;//se crea el objeto MarcaDeVehiculo
        EntradaDeTeclado entrada1=new EntradaDeTeclado();//se introduce una marca de coche
        for(MarcaDeVehiculo aux:marca.values()){
        ----->   if(entrada1.getEntrada().toString().equals(aux.toString().toLowerCase())){
                this.marca=aux; //La marca introducida se asigna a la variable marca.
                return done;
            }
        }
        return done=false;
    }

Fijate que si introduces en mayuscula el valor te dice que no es igual al enum, arreglar esto es fácil.

if(entrada1.getEntrada().toString().toUpperCase().equals(aux.toString()))

Así, introduzcan minúsculas o mayusculas, las haces mayusculas como los enum.


« Última modificación: 06 de Mayo 2015, 20:26 por Lorenzo31 »

el_calderas

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 43
    • Ver Perfil
Muchas gracias por las respuestas. Lo del println ha sido un despiste por la constunmbre de utilizarlo siempre en ese formato...

En cuanto a la modificación del metodo, pues la verdad es que no lo habia visto y tienes razon, tal y como lo corrijes no habra diferencia entre escribir en mayusculas o minusculas.

Gracias y un saludo.

 

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