Foros aprenderaprogramar.com
		Aprender a programar => Aprender a programar desde cero => Mensaje iniciado 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
 /*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
 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
 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
  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;
 
 }
 }
 }
 
 
 
 
- 
				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