Autor Tema: Sobre Enums y su uso en Java pedir datos y mostrar resumen por pantalla  (Leído 5189 veces)

DcdacD

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Buenas tardes, tras pelear varias horas, no soy capaz de conseguir lo que voy a exponer a continuación, estoy iniciándome en el mundo Java y asimilando datos y conceptos, os expongo:

Estoy en el tipico problema de realizar una clase que pida varios datos para luego mostrar un resumen en pantalla de la creación del coche:
Código: [Seleccionar]
package beans;
import java.util.Scanner;

/**
 *
 * @author DcdacD
 */
public class DatoCoche {
    enum ColorDeCoche {Rojo, Verde, Blanco, Negro, Amarillo, Azul};
    enum TipoDeCoche{Utilitario, Familiar, Deportivo};
    enum TipoDeSeguro {Todo_Riesgo, Terceros, Terceros_Ampliado};
   
    private String modelo;
    ColorDeCoche color;
    boolean esmetalizada;
    private String matricula;
    TipoDeCoche tipo;
    private int anyoFabricación;
    TipoDeSeguro seguro;

    public DatoCoche() {
        Scanner coche = new Scanner (System.in);
        System.out.println("Introduce el modelo de coche");
        modelo = coche.next();
[color=red]       
        System.out.println("Introduce el color del coche:");
        // No se como solicitar que introduzca el color del coche o muestre los disponibles y luego mediante asignación 1 es rojo, 2 es azul, ... con IF realizar la siguiente operación.
[/color]
   
    }

   
   
   
    public DatoCoche(String modelo, ColorDeCoche color, boolean esmetalizada, String matricula, TipoDeCoche tipo, int anyoFabricación, TipoDeSeguro seguro) {
        this.modelo = modelo;
        this.color = color;
        this.esmetalizada = esmetalizada;
        this.matricula = matricula;
        this.tipo = tipo;
        this.anyoFabricación = anyoFabricación;
        this.seguro = seguro;
    }

    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public ColorDeCoche getColor() {
        return color;
    }

    public void setColor(ColorDeCoche color) {
        this.color = color;
    }

    public boolean isEsmetalizada() {
        return esmetalizada;
    }

    public void setEsmetalizada(boolean esmetalizada) {
        this.esmetalizada = esmetalizada;
    }

    public String getMatricula() {
        return matricula;
    }

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

    public TipoDeCoche getTipo() {
        return tipo;
    }

    public void setTipo(TipoDeCoche tipo) {
        this.tipo = tipo;
    }

    public int getAnyoFabricación() {
        return anyoFabricación;
    }

    public void setAnyoFabricación(int anyoFabricación) {
        this.anyoFabricación = anyoFabricación;
    }

    public TipoDeSeguro getSeguro() {
        return seguro;
    }

    public void setSeguro(TipoDeSeguro seguro) {
        this.seguro = seguro;
    }

    @Override
    public String toString() {
        return "DatoCoche{" + "modelo=" + modelo + ", color=" + color + ", esmetalizada=" + esmetalizada + ", matricula=" + matricula + ", tipo=" + tipo + ", anyoFabricaci\u00f3n=" + anyoFabricación + ", seguro=" + seguro + '}';
    }
   
   
}
« Última modificación: 20 de Enero 2015, 16:38 por Alex Rodríguez »

toni_apr

  • Avanzado
  • ****
  • Mensajes: 497
  • Curiosidad, es uno de los pilares del Conocimiento
    • Ver Perfil
Hola

En tu código no tienes en cuenta algunas de las convenciones de Java.

1º Los tipos enumerados se bautizan con nombre en mayúsculas (igual que las constantes).

2º En el constructor sin parámetros se debe inicializar a valores por defecto o a unos específicos, en el caso del color:

color = ColorDeCoche.Blanco;

Un constructor no debería mostrar mensajes, pedir datos, etc. solo inicializar los atributos.

---------

En cuanto a cómo asignar un enumerado a un atributo, en el caso del color, colocar el siguiente código en el método adecuado.

Código: [Seleccionar]
        System.out.println("Escoja el color del coche con el numero asociado:");
        System.out.println("\t0-Rojo.  1-Verde.  2-Blanco");
        String msg = "Color establecido con exito", valor = coche.next();
        switch (valor) {
            case "0": setColor (ColorDeCoche.Rojo); break;
            case "1": setColor (ColorDeCoche.Verde); break;
            case "2": setColor (ColorDeCoche.Blanco); break;
            default: msg = "Color incorrecto."; break;
        }
        System.out.println(msg);

Enlace recomendado:
https://www.aprenderaprogramar.es/index.php?option=com_content&view=article&id=647:tipos-enumerados-enum-java-ejemplos-de-codigo-error-enum-types-must-not-be-local-ejercicio-cu00681b&catid=68:curso-aprender-programacion-java-desde-cero&Itemid=188

DcdacD

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 4
    • Ver Perfil
Ok, siguiendo tus consejos he terminado el codigo quedando asi:
Código: [Seleccionar]
package beans;
import java.util.Scanner;
import java.util.Objects;

/**
 *
 * @author DcdacD
 */
public final class DatoCoche {
    static enum ColorDeCoche {ROJO,VERDE,BLANCO,NEGRO,AMARILLO,AZUL};
    static enum TipoDeCoche{UTILITARIO,FAMILIAR,DEPORTIVO};
    static enum TipoDeSeguro {TODO_RIESGO,TERCEROS,TERCEROS_AMPLIADOS};
   
    private String modelo;
    ColorDeCoche color;
    private int esmetalizada; //Como hacerlo con boolean ??
    private String matricula;
    TipoDeCoche tipo;
    private int anyoFabricación;
    TipoDeSeguro seguro;

    public DatoCoche() {
        Scanner car = new Scanner (System.in);
        System.out.println("Introduzca el modelo del coche:");
        modelo = car.next();
       
        //do{
        System.out.println("Eliga el color del coche con el nº asociado:");
        System.out.println("\t0-Rojo, 1-Verde, 2-Blanco, 3-Negro, 4-Amarillo, 5-Azul.");
        String msg = "Color almacenado.",
            valor = car.next();
            switch (valor){
            case "0": setColor(ColorDeCoche.ROJO);break;
            case "1": setColor(ColorDeCoche.VERDE);break;
            case "2": setColor(ColorDeCoche.BLANCO);break;
            case "3": setColor(ColorDeCoche.NEGRO);break;
            case "4": setColor(ColorDeCoche.AMARILLO);break;
            case "5": setColor(ColorDeCoche.AZUL);break;
            default:msg ="Color incorrecto.";
            }System.out.println(msg);
        //}while (xxx) Si introduzco el do no se que valores indicarle a while para que se cumpla
           
        do{     //No se como hacer esto siendo esmetalizada un boolean??
        System.out.println("¿ Desea pintura metalizada (1 Si - 2 No) ? ");
        esmetalizada=car.nextInt();
                if (esmetalizada==1){
                    System.out.println("Elegida Pintura Metalizada.");
                }else if (esmetalizada==2){
                    System.out.println("Elegida Pintura Normal.");
                }
        }while (esmetalizada !=1 && esmetalizada !=2);
       
        System.out.println("Indique la matricula del coche:");
        matricula=car.next();
       
        System.out.println("Elija el tipo de Coche con el nº asociado: ");
        System.out.println("\t0-Utilitario, 1-Familiar, 2-Deportivo.");
        String msg1 = "Tipo de coche almacenado.",
                valor1 = car.next();
        switch(valor1){
            case "0":setTipo(TipoDeCoche.UTILITARIO);break;
            case "1":setTipo(TipoDeCoche.FAMILIAR);break;
            case "2":setTipo(TipoDeCoche.DEPORTIVO);break;
            default:msg1="Tipo Incorrecto";
        }System.out.println(msg1);
       
        System.out.println("Introduzca el año de fabricación: ");
        anyoFabricación = car.nextInt();
       
        System.out.println("Elija el tipo de Seguro: (0-1-2)");
        System.out.println("\t0-TODO RIESGO, 1-TERCEROS, 2-TERCEROS_AMPLIADOS");
        String msg2="Tipo de Seguro confirmado.";
        String valor2;
        valor2 = car.next();
                switch(valor2){
                    case "0":setSeguro(TipoDeSeguro.TODO_RIESGO);break;
                    case "1":setSeguro(TipoDeSeguro.TERCEROS);break;
                    case "2":setSeguro(TipoDeSeguro.TERCEROS_AMPLIADOS);break;
                    default:msg2="Tipo Incorrecto.";
                }System.out.println(msg2);
    }
   
   
    public String getModelo() {
        return modelo;
    }

    public void setModelo(String modelo) {
        this.modelo = modelo;
    }

    public ColorDeCoche getColor() {
        return color;
    }

    public void setColor(ColorDeCoche color) {
        this.color = color;
    }

    public int getEsmetalizada() {
        return esmetalizada;
    }

    public void setEsmetalizada(int esmetalizada) {
        this.esmetalizada = esmetalizada;
    }

    public String getMatricula() {
        return matricula;
    }

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

    public TipoDeCoche getTipo() {
        return tipo;
    }

    public void setTipo(TipoDeCoche tipo) {
        this.tipo = tipo;
    }

    public int getAnyoFabricación() {
        return anyoFabricación;
    }

    public void setAnyoFabricación(int anyoFabricación) {
        this.anyoFabricación = anyoFabricación;
    }

    public TipoDeSeguro getSeguro() {
        return seguro;
    }

    public void setSeguro(TipoDeSeguro seguro) {
        this.seguro = seguro;
    }

    @Override
    public int hashCode() {
        int hash = 7;
        return hash;
    }

    @Override
    public boolean equals(Object obj) {
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final DatoCoche other = (DatoCoche) obj;
        if (!Objects.equals(this.matricula, other.matricula)) {
            return false;
        }
        return true;
    }
   
    @Override
    public String toString() {
        return "DatoCoche: " + "\nmodelo= " + modelo.toUpperCase() + ", \ncolor= " + color + ", \nTipo Pintura (1 MET, 2 NORM)= " + esmetalizada + ", \nmatricula= " + matricula.toUpperCase() + ", \ntipo Coche=" + tipo + ", \nAño Fabricación=" + anyoFabricación + ", \nTipo Seguro=" + seguro ;
    }
}

Veo que sólo tengo una clase de 165 líneas y creo que lo suyo sería tener los especialistas (clases) de: TipoDeCoche, TipoDeSeguro, etc, no ? y así repartir las tareas y no tener una sola clase tan grande. La cosa es que me pierdo y no se si sé confeccionar el código de forma correcta, seríais tan amables de iniciarme.
Gracias.

Mario R. Rancel

  • Administrador
  • Experto
  • ********
  • APR2.COM
  • Mensajes: 1978
    • Ver Perfil
Hola DcdacD, para entender las bases de la programación orientada a objetos y del diseño de clases recomendamos seguir el siguiente curso: http://aprenderaprogramar.com/index.php?option=com_content&view=category&id=68&Itemid=188

En este curso se trabajan todos los conceptos necesarios de base para este tipo de programación.

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