Foros aprenderaprogramar.com
		Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Luis Fdo Carvajal en 25 de Mayo 2017, 19:22
		
			
			- 
				Buenos días, ejercicio CU00921C del tutorial de programación Java avanzado.
 
 He tratado de desarrollar este ejercicio creando un arrayList y un LinkedList para que en tiempo de ejecución entreguen los resultados de ambos casos. Pero finalmente no logro eliminar del conteo los vehículos diferentes al objeto coche. No encuentro dónde esta el error.
 Adjunto código correspondiente.
 a) Implementa el programa usando ArrayList. ¿Cuál es el resultado que obtienes?
 
 Rpta: En ambos casos el resultado final es el mismo utilizando el arrayList o el LinkedList, sólo que el primero gasta mucho mas tiempo de procesamiento.
 
 
 b) Implementa el programa usando LinkedList ¿Cuál es el resultado que obtienes?
 
 Rpta: En ambos casos el resultado final es el mismo utilizando el arrayList o el LinkedList, sólo que el segundo invierte mucho menos tiempo de procesamiento.
 
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Random;
 /**
 *
 * @author itco1724
 */
 public class TestVehiculo {
 
 /**
 * @param args the command line arguments
 */
 public static void main(String[] args) {
 List<Vehiculo> cp = new ArrayList<Vehiculo>();
 List<Vehiculo> sp = new LinkedList<Vehiculo>();
 String[] Vehiculos = {"Coche", "Camion", "Furgoneta", "Moto"};
 
 Random r = new Random();
 Vehiculo temp = null;
 long inicio=0;
 long inicio1=0;
 long fin = 0;
 long fin1 = 0;
 int numeroCoches = 0;
 int numeroCamiones = 0;
 int numeroFurgonetas = 0;
 int numeroMotos = 0;
 int vehiculosEliminados = 0;
 
 // LLenar las listas arrayList - LinkedList con 5000 tipos de vehiculos
 
 for(int i=0;i<5001;i++) {
 cp.add(new Vehiculo(i,Vehiculos[r.nextInt((0)+4)]));
 sp.add(new Vehiculo(i,Vehiculos[r.nextInt((0)+4)]));
 }
 
 Iterator<Vehiculo> it = cp.iterator();
 Iterator<Vehiculo> et = sp.iterator();
 
 while(it.hasNext()){
 
 temp = it.next();
 switch (temp.getTipo()){
 case "Coche":
 numeroCoches ++;
 break;
 case"Camion":
 numeroCamiones ++;
 break;
 case "Furgoneta":
 numeroFurgonetas ++;
 break;
 case "Moto":
 numeroMotos ++;
 break;
 }
 //Imprime el arrayList por completo
 //System.out.println(temp);
 
 }
 while(et.hasNext()){
 
 temp = et.next();
 switch (temp.getTipo()){
 case "Coche":
 numeroCoches ++;
 break;
 case"Camion":
 numeroCamiones ++;
 break;
 case "Furgoneta":
 numeroFurgonetas ++;
 break;
 case "Moto":
 numeroMotos ++;
 break;
 }
 //System.out.println(temp);
 
 }
 //Imprimir el arraList y el LinkedList con los objetos vehiculos contabilizados
 System.out.println("Resumen arraylist inicial : hay " + numeroCoches + " Coches,"+numeroCamiones + " Camiones," + numeroFurgonetas + " Furgonetas y " + numeroMotos + " Motos");
 System.out.println("Resumen LinkedList inicial : hay " + numeroCoches + " Coches,"+numeroCamiones + " Camiones," + numeroFurgonetas + " Furgonetas y " + numeroMotos + " Motos");
 //elimina todos los vehículos que no son coches de la arraylist y contabiliza el tiempo
 
 inicio = System.nanoTime();
 
 it = cp.iterator();
 while (it.hasNext()) {
 temp = it.next();
 // Eliminación de objetos del arrayList
 //if (!temp.getTipo().equals("Coche")) {it.remove(); vehiculosEliminados++;}
 if (temp.getTipo().equals("Camion") || temp.getTipo().equals("Furgoneta") || temp.getTipo().equals("Moto") ) {
 it.remove();
 vehiculosEliminados++;}
 }
 
 //elimina todos los vehículos que no son coches del linkedList y contabiliza el tiempo
 
 inicio1 = System.nanoTime();
 
 et = sp.iterator();
 while (et.hasNext()) {
 temp = et.next();
 // Eliminación de objetos del LinkedList
 //if (!temp.getTipo().equals("Coche")) {et.remove(); vehiculosEliminados++;}
 if (temp.getTipo().equals("Camion") || temp.getTipo().equals("Furgoneta") || temp.getTipo().equals("Moto") ) {
 et.remove();
 vehiculosEliminados++;}
 }
 
 //Añade mismo numero de coches a eliminados al arrayList
 for (int i=0; i<vehiculosEliminados; i++) {
 cp.add(new Vehiculo (numeroCoches+i+1, "Coche"));}
 
 //Añade mismo numero de coches a eliminados al LinkedList
 for (int i=0; i<vehiculosEliminados; i++) {
 sp.add(new Vehiculo (numeroCoches+i+1, "Coche"));}
 
 fin = System.nanoTime();
 fin1 = System.nanoTime();
 //Recorrer el arrayList para calcular las cantidades de vehiculos nuevamente
 
 it = cp.iterator();
 
 while (it.hasNext()) {
 Vehiculo tmp = it.next();
 if (tmp.getTipo().equals("Coche")) {numeroCoches++;}
 else if (tmp.getTipo().equals("Camión")) {numeroCamiones++;}
 else if (tmp.getTipo().equals("Furgoneta")) {numeroFurgonetas++;}
 else {numeroMotos++;}
 }
 
 //Recorrer el LinkedList para calcular las cantidades de vehiculos nuevamente
 
 et = sp.iterator();
 
 while (it.hasNext()) {
 Vehiculo tmp = it.next();
 if (tmp.getTipo().equals("Coche")) {numeroCoches++;}
 else if (tmp.getTipo().equals("Camión")) {numeroCamiones++;}
 else if (tmp.getTipo().equals("Furgoneta")) {numeroFurgonetas++;}
 else {numeroMotos++;}
 }
 System.out.println ("Tiempo empleado en eliminación-inserción (en nanosegundos): "+(fin-inicio)+".");
 System.out.println("Resumen arrayList final : hay " + numeroCoches + " Coches,"+numeroCamiones + " Camiones," + numeroFurgonetas + " Furgonetas y " + numeroMotos + " Motos");
 System.out.println ("Tiempo empleado en eliminación-inserción (en nanosegundos): "+(fin1-inicio1)+".");
 System.out.println("Resumen LinkedList final : hay " + numeroCoches + " Coches,"+numeroCamiones + " Camiones," + numeroFurgonetas + " Furgonetas y " + numeroMotos + " Motos");
 }
 }
 
 Y la clase vehiculopublic class Vehiculo {
 
 private int ID;
 private String tipo;
 
 public Vehiculo(int ID, String tipo) {
 this.ID = ID;
 this.tipo = tipo;
 }
 
 
 
 
 @Override
 public String toString() { StringBuilder sb = new StringBuilder();
 return " VEHICULOS -->: ID" + ID + " " + "Tipo: "+ tipo;}
 
 
 //Métodos
 public int getID() { return ID; }		//Método función para retornar el ID
 public String getTipo() {return tipo;}	//Método función retornar marca
 
 }  //Cierre de la clase
 
- 
				Hola Luis Fdo Carvajal
 
 Por favor, si creas temas en el foro, ponle un título adecuado siguiendo las indicaciones que se dan en https://www.aprenderaprogramar.com/foros/index.php?topic=1460.0
 
 El enunciado pedía generar 5000 objetos de tipo Vehiculo
 
 Con el bucle for(int i=0;i<5001;i++)   estás generando 5001 objetos. Debes tener claro el manejo de bucles e índices. El índice 0 constituye el primer elemento. Luego has definido ir del 1 al 5000. Total tienes 1 + 5000 = 5001 objetos, que no es exactamente lo que pedía el ejercicio.
 
 La expresión r.nextInt((0)+4) no parece adecuada, ya que r.nextInt(4) es lo mismo pero más claro.
 
 El código no cumple lo que pedía el ejercicio
 
 Además la medición de tiempo no veo que independice bien la medición de la operación con ArrayList de la operación con LinkedList, de hecho el ejercicio lo que pedía era implementar los códigos por separado, no en un mismo programa
 
 Este ejercicio deberías replantearlo
 
 Saludos