Autor Tema: Tipos enumerados (enum) Java en qué se diferencian de tipo String CU00681B  (Leído 2605 veces)

LuisM

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 131
    • Ver Perfil
Hola a todos !!
Paso a dejar el codigo del ejercicio propuesto en la entrega CU00681B del curso básico de programación Java. Realmente es el ejercicio que mas me costó realizar, tuve que reescribir bastante y por poco lo dejo para después de la siguiente entrega. Busqué información y me ayudó mucho usar valueOf() y toString() para escribir un código "aceptable"  ;)

Desde ya muchas gracias a los cometarios y correcciones que habrá.

Saludos


Metodo main

Código: [Seleccionar]
/**
 * Descripción para javadoc antes de la clase. Ejemplo para tipos enumerados
 * @author Luis
 */
public class TestEnum {
    public static void main (String[ ] Args) {
        Vehiculo claseVehiculo = new Vehiculo();
        EntradaDeTeclado entrada = new EntradaDeTeclado();
        System.out.println ("Por favor introduzca una marca (FORD, TOYOTA, SUZUKI, RENAULT, SEAT) :");
        entrada.pedirEntrada();
        String marcaVehiculo = entrada.getEntrada();
        claseVehiculo.setMarca(marcaVehiculo);
        System.out.println ("Por favor introduzca una matrícula:");
        entrada.pedirEntrada();
        String matriculaVehiculo = entrada.getEntrada();
        claseVehiculo.setMatricula(matriculaVehiculo);
        System.out.println ("El vehículo ingresado es marca "+claseVehiculo.getMarca()+" y la matrícula es "+claseVehiculo.getMatricula());
    } //Cierre del main
} //Cierre de la clase


Clase Vehiculo - uso de enum

Código: [Seleccionar]
/**
 * Descripción para javadoc antes de la clase. Clase del ejercicio aprenderaprogramar.com para tipos enumerados
 * @author Luis
 */
enum MarcaDeVehiculo {FORD, TOYOTA, SUZUKI, RENAULT, SEAT};
public class Vehiculo {
    String matricula = "";
    MarcaDeVehiculo marca;
    public Vehiculo(String valor_matricula, String valor_marca){
        setMatricula(valor_matricula);
        setMarca(valor_marca);
    }

    public Vehiculo(){
    }

    public void setMatricula(String valor_matricula) {
        matricula = valor_matricula;
    }

    public void setMarca(String valor_marca) {
        marca = MarcaDeVehiculo.valueOf(valor_marca);
    }

    public String getMarca(){
        return marca.toString();               
    }

    public String getMatricula(){
        return matricula;
    }
} //Cierre de la clase


Clase usada para el ingreso de los datos, ya usada en ejercicios anteriores

Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado aprenderaprogramar.com
public class EntradaDeTeclado {
    private String entradaTeclado; //Variable de instancia (campo) de la clase
    public EntradaDeTeclado ()  { //Constructor
        entradaTeclado="";
     //   pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
    } //Cierre del constructor
    public void pedirEntrada ()  {  //Método de la clase         
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();
        } //Cierre del método pedirEntrada
    public String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada
    public String getPrimeraPalabra ()  {
               for (int i=0; i < entradaTeclado.length() - 1; i++) {
            if (entradaTeclado.substring (i, i+1).equals(" ") ) {     //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS
                return entradaTeclado.substring(0, i+1);         }
        }
        return entradaTeclado;  //Caso de que no se detecte ningún espacio devolvemos lo que haya
    } //Cierre del método getPrimeraPalabra
    public int getLongitud ()  {  //Método de la clase
        return entradaTeclado.length();
    } //Cierre del método getLongitud
} //Cierre de la clase
« Última modificación: 18 de Agosto 2017, 18:55 por Alex Rodríguez »

Alex Rodríguez

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2050
    • Ver Perfil
Hola LuisM, en este ejercicio no es necesario usar toString(), que se explica más adelante en el curso.

Para usar el tipo enumerado, te has valido en todo momento de conversión en String. Pero eso no es lo más adecuado, o al menos no supone una buena comprensión del uso de enumerados. Revisa este ejercicio https://www.aprenderaprogramar.com/foros/index.php?topic=3140.0 y los comentarios, lo que ahí se comenta creo que te servirá para comprender mejor el uso de enumerados sin depender de String.

Una cosa básica a comprender: el método setMarca no puede recibir un String como parámetro, porque Marca no es un String. Un set siempre debe recibir el tipo del dato que va a establecer.

Saludos

LuisM

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 131
    • Ver Perfil
Hola Alex !! Muchas gracias por tu corrección del ejercicio. Volví a leer la definición de enum y mi error fue confundirlo como una colección de strings cuando realmente es una colección inmodificable de objetos del tipo enum !!!!
Paso a dejar el código ya corregido en la clase Vehiculo
Saludos
Luis
Clase principal - metodo main
Código: [Seleccionar]
/**
 * Descripción para javadoc antes de la clase. Ejemplo para tipos enumerados
 * @author Luis
 */
public class TestEnum {
    public static void main (String[ ] Args) {
        Vehiculo claseVehiculo = new Vehiculo();
        EntradaDeTeclado entrada = new EntradaDeTeclado();
        System.out.println ("Por favor introduzca una marca (FORD, TOYOTA, SUZUKI, RENAULT, SEAT) :");
        entrada.pedirEntrada();
        String marcaVehiculo = entrada.getEntrada();
        claseVehiculo.setMarca(marcaVehiculo);
        System.out.println ("Por favor introduzca una matrícula:");
        entrada.pedirEntrada();
        String matriculaVehiculo = entrada.getEntrada();
        claseVehiculo.setMatricula(matriculaVehiculo);
        System.out.println ("El vehículo ingresado es marca "+claseVehiculo.getMarca()+" y la matrícula es "+claseVehiculo.getMatricula());
    } //Cierre del main
} //Cierre de la clase
Clase Vehiculo
Código: [Seleccionar]
/**
 * Descripción para javadoc antes de la clase. Clase del ejercicio aprenderaprogramar.com para tipos enumerados
 * @author Luis
 */
enum MarcaDeVehiculo {FORD, TOYOTA, SUZUKI, RENAULT, SEAT};
public class Vehiculo {
    String matricula = "";
    MarcaDeVehiculo marca;
    public Vehiculo(String valor_matricula, String valor_marca){
        matricula=valor_matricula;
        setMarca(valor_marca);
    }

    public Vehiculo(){
    }

    public void setMatricula(String valor_matricula) {
        matricula = valor_matricula;
    }

    public void setMarca(String valor_marca) {
        if (valor_marca.equals("FORD")) {marca = MarcaDeVehiculo.FORD;} else
        if (valor_marca.equals("TOYOTA")) {marca = MarcaDeVehiculo.TOYOTA;} else
        if (valor_marca.equals("SUZUKI")) {marca = MarcaDeVehiculo.SUZUKI;} else
        if (valor_marca.equals("RENAULT")) {marca = MarcaDeVehiculo.RENAULT;} else
        if (valor_marca.equals("SEAT")) {marca = MarcaDeVehiculo.SEAT;}
    }

    public MarcaDeVehiculo getMarca(){
        return marca;               
    }

    public String getMatricula(){
        return matricula;
    }
} //Cierre de la clase

y la clase que sirve para el ingreso de datos
Código: [Seleccionar]
import java.util.Scanner; //Importación del código de la clase Scanner desde la biblioteca Java
// Definimos una clase EntradaDeTeclado aprenderaprogramar.com
public class EntradaDeTeclado {
    private String entradaTeclado; //Variable de instancia (campo) de la clase
    public EntradaDeTeclado ()  { //Constructor
        entradaTeclado="";
     //   pedirEntrada(); //Esto es una llamada a un método interno. Al crear un objeto ejecutamos el método
    } //Cierre del constructor
    public void pedirEntrada ()  {  //Método de la clase         
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine ();
        } //Cierre del método pedirEntrada
    public String getEntrada () { return entradaTeclado; } //Cierre del método getEntrada
    public String getPrimeraPalabra ()  {
               for (int i=0; i < entradaTeclado.length() - 1; i++) {
            if (entradaTeclado.substring (i, i+1).equals(" ") ) {     //IMPORTANTÍSIMO: COMPARAMOS CON EQUALS
                return entradaTeclado.substring(0, i+1);         }
        }
        return entradaTeclado;  //Caso de que no se detecte ningún espacio devolvemos lo que haya
    } //Cierre del método getPrimeraPalabra
    public int getLongitud ()  {  //Método de la clase
        return entradaTeclado.length();
    } //Cierre del método getLongitud
} //Cierre de la clase
« Última modificación: 18 de Agosto 2017, 23:00 por LuisM »

 

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