Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: LuisM en 02 de Agosto 2017, 01:13

Título: Tipos enumerados (enum) Java en qué se diferencian de tipo String CU00681B
Publicado por: LuisM en 02 de Agosto 2017, 01:13
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
Título: Re:Tipos enumerados (enum) Java en qué se diferencian de tipo String CU00681B
Publicado por: Alex Rodríguez en 18 de Agosto 2017, 18:57
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
Título: Re:Tipos enumerados (enum) Java en qué se diferencian de tipo String CU00681B
Publicado por: LuisM en 18 de Agosto 2017, 22:52
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