Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: momo en 13 de Octubre 2014, 22:48

Título: ejercicio CU00681B tipos enumerados en Java
Publicado por: momo en 13 de Octubre 2014, 22:48
Bueno Amigos Necesito ayuda
primero : El ejercicio me corre es en eclipse no se por que en bluj no funciona.

Segundo cuando mando a mostrar las lista de los vehiculos matriculados me muestra  es el ultimo vehiculo que agregue .

e tratado de resolver este problema pero no le consigo la vuelta.

Ejercicio
Citar
/*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. Puedes comprobar si
 * tu código es correcto consultando en los foros aprenderaprogramar.com.
   */

EntradaTeclado
Código: [Seleccionar]
import java.util.Scanner;
public class EntradaTeclado {

private String entradaTeclado;
public EntradaTeclado(){

entradaTeclado="";
pedirEntrada();
}
public void pedirEntrada()
{
Scanner escaneo=new Scanner(System.in);
entradaTeclado=escaneo.nextLine();
}
public String getEntrada(){return entradaTeclado;}
}




TestVehiculo
Código: [Seleccionar]
import java.util.*;
public class TestVehiculo
{
    public static void main(String [] args)
    {
        List<Vehiculo>listaVehiculo=new ArrayList<Vehiculo>();
    Vehiculo vehiculo=new Vehiculo();
        EntradaTeclado teclado=new EntradaTeclado();
        boolean volver=true;
        while(volver)
        {
            System.out.println(" Menu Vehiculo");
            System.out.println("1.- Elegir Vehiculo");
            System.out.println("2.- Mostrar Lista Vehiculo");
            teclado.pedirEntrada();
            Integer menu=Integer.valueOf(teclado.getEntrada());
            switch(menu)
            {
                case 1:
                {
               
                   boolean otroVehiculo=true;
                   while(otroVehiculo)
                   
                   {
                System.out.println(" Vehiculo a Elegir");
                    System.out.println("1-FORD °° 2-TOYOTA °° 3-SUZUKI °° 4-RENAULT °° 5-SEAT. ");
                    teclado.pedirEntrada();
                   String elegir=teclado.getEntrada();
                    vehiculo.elegirVehiculo(elegir);
                   
                    System.out.println("Escriba el Nombre de la Matricula");
                    teclado.pedirEntrada();
                    vehiculo.setMatricula(teclado.getEntrada());
                    listaVehiculo.add(vehiculo);
                   
                    System.out.println("Deceas Ingresar otro vehiculo s/n :");
                    teclado.pedirEntrada();
                    if(teclado.getEntrada().equals("s"))
                    {
                    otroVehiculo=true;
                    }else{otroVehiculo=false;}
                   }
                    break;

                }
                case 2:
                {               
                Iterator<Vehiculo> it=listaVehiculo.iterator();
                while(it.hasNext())
                {
                vehiculo=it.next();
                System.out.println("Marca :"+vehiculo.getMarca()+" "+"Matricula :"+vehiculo.getMatricula());
                }
                }
            }
            System.out.println(" Deceas Volcer al Menu Principal s / n");
            teclado.pedirEntrada();
            if(teclado.getEntrada().equals("s"))
            {
                volver=true;
            }else { volver=false;}

        }
        System.out.println("Adios");

    }
}
Vehiculo
Código: [Seleccionar]
public class Vehiculo
{
    enum MarcaDeVehiculo{FORD, TOYOTA, SUZUKI, RENAULT, SEAT};
   
    private String matricula;
    private MarcaDeVehiculo marca;
   
    public Vehiculo()
    {
       matricula="";
       marca=null;
    }
    public void setMarca(MarcaDeVehiculo marca)
    {
        this.marca=marca;
    }
    public void setMatricula(String matricula)
    {
        this.matricula=matricula;
    }
    public MarcaDeVehiculo getMarca(){return marca;}
    public String getMatricula(){return matricula;}
   public void elegirVehiculo(String menu)
    {
       
        switch(menu)
        {
           
            case "1":
            {
                setMarca(MarcaDeVehiculo.FORD);
                break;           
            }
            case "2":
            {
                setMarca(MarcaDeVehiculo.TOYOTA);
                break;
            }
            case "3":
            {
                setMarca(MarcaDeVehiculo.SUZUKI);
                break;
            }
            case "4":
            {
                setMarca(MarcaDeVehiculo.RENAULT);
                break;
            }
            case "5":
            {
                setMarca(MarcaDeVehiculo.SEAT);
                break;
            }
            default :break;
       
        }
    }
 }



Título: Re:CU00681B
Publicado por: toni_apr en 14 de Octubre 2014, 19:25
Hola momo
Si tu código tiene dos pequeñas deficiencias

1ª Al principio del main y antes de presentar ningún mensaje declaras e inicializa el objeto teclado de tipo EntradaTeclado.
Verás que el constructor de esta clase llama a su método pedirEntrada()
Esto hace que el programa espere una entrada de teclado con un ENTER  al final. Hasta que no introduzcas ese ENTER no se ejecutará el resto del código. Además como no has presentado ningún mensaje por consola, si esta no está abierta, tendrás que llamarla por el menú de BlueJ.

2ª Si introduces o matriculas más de un vehículo, en el listado de vehículos, se repetirá siemptre el último vehículo introducido.
Esto ocurre porque durante todo el tiempo estás trabajando con el mismo objeto vehiculo (siempre la misma dirección de memoria), lo que estás haciendo es cambiar la marca y matrícula del mismo vehículo.
Para solucionarlo, debes crear un objeto de tipo vehiculo nuevo (distinto) cada vez que eliges otro vehículo.

Te propongo que rediseñes el código para solucionar estas dos deficiencias.

Nota: Un método útil a la hora de detectar las pulsaciones de teclado es una versión del 'equals()' llamada
equalsIgnoreCase("..texto..")
ver siguiente enlace
https://www.aprenderaprogramar.com/foros/index.php?topic=1302.msg7773#msg7773 (https://www.aprenderaprogramar.com/foros/index.php?topic=1302.msg7773#msg7773)

Eso es todo. Saludos