Foros aprenderaprogramar.com

Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: Dimitar Stefanov en 11 de Marzo 2016, 20:30

Título: Tipos enumerados (enum) Java como atributos propiedades o campos clase CU00681
Publicado por: Dimitar Stefanov en 11 de Marzo 2016, 20:30
Buenas noches.

Dejo aquí una solución del ejercicio CU00681B del curso Java desde cero.

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

El código de la clase "Vehiculo":

Código: [Seleccionar]
/**
 * Clase para crear objetos "Vehiculo" de tipo "enum" con atributos "matricula" y "marca".
 * @author: Dimitar S. Stefanov
 * version: 11/03/2016/A
 *  @see <a href="http://aprenderaprogramar.com">aprenderaprogramar.com - Didáctica en programación</a>
 */
public class Vehiculo{
    enum MarcaDeVehiculo {FORD, TOYOTA, SUZUKI, RENUALT, SEAT};
   
    private String matricula;
    private MarcaDeVehiculo marca;
   
    /**
     * Constructor del objeto que define los atributos.
     */
    public Vehiculo(){
        matricula = "";
        marca = null;
    }
   
    /**
     * Mediante un parámetro se establece la matrícula del vehículo
     * @param matricula El valor del parámetro que se introduzca será el valor de la matrícula. 
     */
    public void setMatricula(String matricula){
        this.matricula = matricula;
    }
   
    /**
     * Mediante un parámetro se establece la matrícula del vehículo
     * @param marca El valor del parámetro que se introduzca será el valor de la marca. 
     */
    public void setMarca(MarcaDeVehiculo marca){
        this.marca = marca;
    }
   
    /**
     * Método para obtener la matrícula del Objeto
     * @param Devuelve el valor de la matrícula.
     */
    public String getMatricula(){return matricula;}
   
    /**
     * Método para obtener la marca del Objeto.
     * @param Devuelve el valor de la marca.
     */
    public MarcaDeVehiculo getMarca(){return marca;}
}

El código de la clase "Test":

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

public class Test{
    public static void main(String []Args){
        String entradaTeclado;
        Vehiculo vehiculo = new Vehiculo();
        Scanner sc = new Scanner(System.in);
        System.out.println("\f");
        System.out.print("Entra matrícula: ");
        entradaTeclado = sc.nextLine();
        vehiculo.setMatricula(entradaTeclado);
        System.out.println("La matrícula del vehícuo es: "+vehiculo.getMatricula());
        System.out.println("Entra alguna de las siguentes marcas de vechículos: Ford, Toyota, Suzuki, Renault, Seat ");
        entradaTeclado = sc.nextLine();
        if(entradaTeclado.equalsIgnoreCase("Ford")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.FORD);
       }else if(entradaTeclado.equalsIgnoreCase("Toyota")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.TOYOTA);
        }else if(entradaTeclado.equalsIgnoreCase("Suzuki")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.SUZUKI);
        }else if(entradaTeclado.equalsIgnoreCase("Renault")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.SUZUKI);
        }else if(entradaTeclado.equalsIgnoreCase("Seat")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.SEAT);
        }
        else{
            System.out.println("No has elegido ninguna de las marcas enumaradas.");
        }
       
        if(entradaTeclado.equalsIgnoreCase("Ford") || entradaTeclado.equalsIgnoreCase("Toyota") || entradaTeclado.equalsIgnoreCase("Suzuki") || entradaTeclado.equalsIgnoreCase("Renault") || entradaTeclado.equalsIgnoreCase("Seat")){
        System.out.println("La marca es: "+vehiculo.getMarca());
       }else{
        System.out.println("Inténtalo de nuevo :)");
        }
    }
}

Gracias
Título: Re:Tipos enumerados (enum) Java como atributos propiedades o campos clase CU00681
Publicado por: César Krall en 13 de Marzo 2016, 20:13
Hola! Bastante bien!

Recomendación importante: evita realizar comprobaciones ya realizadas. Evita repetir!

Por ejemplo en este código evitamos una larga secuencia de if aprovechando lo hecho anteriormente:

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

public class Test{
    public static void main(String []Args){
        boolean todoCorrecto = true;
        String entradaTeclado;
        Vehiculo vehiculo = new Vehiculo();
        Scanner sc = new Scanner(System.in);
        System.out.println("\f");
        System.out.print("Entra matrícula: ");
        entradaTeclado = sc.nextLine();
        vehiculo.setMatricula(entradaTeclado);
        System.out.println("La matrícula del vehícuo es: "+vehiculo.getMatricula());
        System.out.println("Entra alguna de las siguentes marcas de vechículos: Ford, Toyota, Suzuki, Renault, Seat ");
        entradaTeclado = sc.nextLine();
        if(entradaTeclado.equalsIgnoreCase("Ford")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.FORD);
       }else if(entradaTeclado.equalsIgnoreCase("Toyota")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.TOYOTA);
        }else if(entradaTeclado.equalsIgnoreCase("Suzuki")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.SUZUKI);
        }else if(entradaTeclado.equalsIgnoreCase("Renault")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.SUZUKI);
        }else if(entradaTeclado.equalsIgnoreCase("Seat")){
        vehiculo.setMarca(Vehiculo.MarcaDeVehiculo.SEAT);
        }
        else{
            todoCorrecto=false;
            System.out.println("No has elegido ninguna de las marcas enumaradas.");
        }
       
        if(todoCorrecto){
        System.out.println("La marca es: "+vehiculo.getMarca());
       }else{
        System.out.println("Inténtalo de nuevo :)");
        }
    }
}

Saludos!
Título: Re:Tipos enumerados (enum) Java como atributos propiedades o campos clase CU00681
Publicado por: Dimitar Stefanov en 14 de Marzo 2016, 14:40
Hola, César.

Debo decir, una manera mucho más cuidadosa y organizada de sustituir la parte del código que se me repetía a mí. Yo también pensaba "a ver como puedo sustituir toda esa repiticion", pero no se me ocurrió nada. Espero que con el tiempo y la experiencia a mí también me salgan estas cosas :)

Gracias por corregir otro ejercicio más. (Ya he corregido (copiado) el código de la clase "Test" de acuerdo con tus observaciones).

Saludos