Título: Arraylist
Publicado por: luis9829 en 26 Mayo 2019, 00:39 am
buenas quisiera que me ayuden como implemento el siguiente metodo en mi arraylist les dejo lo que e codificado de la clase y el arraylist el metodo dice: se debe Comparar un coche con su anteriormente ingresado clase coche public class Coche { // Atributos private static int aux=0; private final int numCarros; private String matricula; private String marca; private String modelo; private int Km; // Getters y setters public String getMatricula() { return matricula; } public void setMatricula(String matricula) { this.matricula = matricula; } public String getMarca() { return marca; } public void setMarca(String marca) { this.marca = marca; } public String getModelo() { return modelo; } public void setModelo(String modelo) { this.modelo = modelo; } public int getKm() { return Km; } public void setKm(int km) { Km = km; } public static int getAux() { return aux; } public static void setAux(int aux) { Coche.aux = aux; } public int getNumCarros() { return numCarros; } // constructor por defecto public Coche() { this.numCarros=0; this.matricula = ""; this.marca = ""; this.modelo = ""; Km = 0; } // constructor public Coche( String vmarca,String vmatricula, String vmodelo, int vkm) { numCarros=++aux; this.marca = vmarca; this.matricula = vmatricula; this.modelo = vmodelo; Km = vkm; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Coche other = (Coche) obj; if (Km != other.Km) return false; if (marca == null) { if (other.marca != null) return false; } else if (!marca.equals(other.marca)) return false; if (matricula == null) { if (other.matricula != null) return false; } else if (!matricula.equals(other.matricula)) return false; if (modelo == null) { if (other.modelo != null) return false; } else if (!modelo.equals(other.modelo)) return false; if (numCarros != other.numCarros) return false; return true; } @Override public String toString() { return "Auto # :"+ numCarros + "\n Marca: " + this.getMarca() + "\n Modelo: " + modelo + "\n Matricula: " + this.getMatricula() + "\n Kilometraje: " + Km; } }
arraylistcoches import java.util.ArrayList; public class ListaCoches { private ArrayList<Coche> lista;
public ArrayList<Coche> getLista() { return lista; }
public void setLista(ArrayList<Coche> lista) { this.lista = lista; }
public ListaCoches() { this.lista = new ArrayList<Coche>() ; } // metodos public void mostrarCoches() { for(Coche c : lista){ System.out.println(c); } }
public void agregarCoches(Coche c1) { lista.add(c1); }
public void mostrarPorMarca(String marca) { ListaCoches listam = new ListaCoches(); for(Coche c :lista) { if(c.getMarca().equals(marca)) { listam.agregarCoches(c); System.out.println(c); } } } public void mostrarPorKm(int kilometros) { ListaCoches listak = new ListaCoches(); for(Coche c:lista) { if(c.getKm()<kilometros) { listak.agregarCoches(c); System.out.println(c); } } } public Coche mayorKm() { Coche aux=new Coche(); int numKm=0; for(Coche c:lista) { if(c.getKm()>numKm) { numKm=c.getKm(); aux=c; } } return aux; }
public void ordenadosPorKm() { int i,j; Coche aux; for(i=0;i<lista.size()-1;i++) for(j=0;j<lista.size()-i-1;j++) if(lista.get(j+1).getKm()<lista.get(j).getKm()) { aux=lista.get(j+1); lista.set(j+1, lista.get(j)); lista.set(j, aux); } mostrarCoches(); } }
pueden ayudarme a como debo implementar ese metodo en mi arraylist
Título: Re: Arraylist
Publicado por: rub'n en 26 Mayo 2019, 00:44 am
Que tal ?
Como ?
se debe Comparar un coche con su anteriormente ingresado, formula mejor la descripción
Título: Re: Arraylist
Publicado por: luis9829 en 26 Mayo 2019, 00:51 am
si osea lo que quiero en si es que el coche que se ingreso al final se lo compare con el que se ingreso antes de ese osea el penultimo si asi lo decimos entonces lo que quiero q me salga como mensaje es que si los dos coches son iguales o si el coche ingresado anteriormente es diferente del final a lo q voy es por ejemplo coche 10
marca toyota placa 12 kilometraje 15
coche 11
marca chevrolet placa 10 kilometraje 0
esto es lo que haria el metodo agregar lo que quiero que haga este otro metodo es compararme y que me salte los mensajes anteriormente descritos
Título: Re: Arraylist
Publicado por: rub'n en 26 Mayo 2019, 16:28 pm
si osea lo que quiero en si es que el coche que se ingreso al final se lo compare con el que se ingreso antes de ese osea el penultimo si asi lo decimos entonces lo que quiero q me salga como mensaje es que si los dos coches son iguales o si el coche ingresado anteriormente es diferente del final a lo q voy es por ejemplo coche 10
marca toyota placa 12 kilometraje 15
coche 11
marca chevrolet placa 10 kilometraje 0
esto es lo que haria el metodo agregar lo que quiero que haga este otro metodo es compararme y que me salte los mensajes anteriormente descritos
* Añadido método en clase ListaCoches, ojo esta manera compara la referencia en memoria no los valores que tiene configurados el objeto por medio sus setters. En este método te lo dejo para que tu mismo lo edites y compares getters con getters, tanto de vehículo anterior como penúltimo, pare que te funcione realmente lo que quieres hacer, porque así uses equals o == , no funcionara correctamente, para este caso que deseas, ve el final en este ejemplo para que veas la diferencia. así como te lo dice Aitor va bien.
/** * usando == para comparar coches equals también te serviría */ public void compararFinalConAnterior() { //si la lista contiene mas de 2 coches if(lista.size() >= 2) { final Coche ultimoCoche = lista.get(lista.size() - 1); final Coche penultimoCoche = lista.get(lista.size() - 2); if( ultimoCoche == (penultimoCoche) ) { LOGGER.info("El ultimo coche y penultimo son iguales"); final StringBuilder sb = new StringBuilder() .append("Ultimo coche: ") .append(ultimoCoche) .append("\nPenultimo coche: ") .append(penultimoCoche); LOGGER.info(sb.toString()); } else { LOGGER.info("El ultimo coche y penultimo son diferentes"); final StringBuilder sb = new StringBuilder() .append("Ultimo coche: ") .append(ultimoCoche) .append("\nPenultimo coche: ") .append(penultimoCoche); LOGGER.info(sb.toString()); } } }
import java.util.Objects; /** * @implSpec NO-THREAD-SAFE */ public class Coche { // Atributos private static int aux = 0; private final int numCarros; private int Km; // Getters y setters public String getMatricula () { return matricula; } public void setMatricula (String matricula ) { this.matricula = matricula; } return marca; } public void setMarca (String marca ) { this.marca = marca; } return modelo; } public void setModelo (String modelo ) { this.modelo = modelo; } public int getKm() { return Km; } public void setKm(int km) { Km = km; } public static int getAux() { return aux; } public static void setAux(int aux) { Coche.aux = aux; } public int getNumCarros() { return numCarros; } // constructor por defecto public Coche() { this.numCarros = ++aux; this.matricula = ""; this.marca = ""; this.modelo = ""; Km = 0; } // constructor numCarros = ++aux; this.marca = vmarca; this.matricula = vmatricula; this.modelo = vmodelo; Km = vkm; } @Override public boolean equals (Object obj ) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Coche other = (Coche) obj; if (Km != other.Km) return false; if (marca == null) { if (other.marca != null) return false; } else if (!marca.equals(other.marca)) return false; if (matricula == null) { if (other.matricula != null) return false; } else if (!matricula.equals(other.matricula)) return false; if (modelo == null) { if (other.modelo != null) return false; } else if (!modelo.equals(other.modelo)) return false; if (numCarros != other.numCarros) return false; return true; } @Override public int hashCode() { return Objects.hash(numCarros, matricula, marca, modelo, Km); } @Override return "Auto # :" + numCarros + "\n Marca: " + this.getMarca() + "\n Modelo: " + modelo + "\n Matricula: " + this.getMatricula() + "\n Kilometraje: " + Km; } }
import java.util.ArrayList; import java.util.List; import java.util.logging.Logger; public class ListaCoches { private ArrayList<Coche> lista; private static final Logger LOGGER = Logger.getLogger(ListaCoches.class.getSimpleName()); public ArrayList<Coche> getLista() { return lista; } public void setLista(ArrayList<Coche> lista) { this.lista = lista; } public ListaCoches() { this.lista = new ArrayList<Coche>(); } // metodos public void mostrarCoches() { for (Coche c : lista) { } } public void agregarCoches(Coche c1) { lista.add(c1); } public void mostrarPorMarca (String marca ) { ListaCoches listam = new ListaCoches(); for (Coche c : lista) { if (c.getMarca().equals(marca)) { listam.agregarCoches(c); } } } public void mostrarPorKm(int kilometros) { ListaCoches listak = new ListaCoches(); for (Coche c : lista) { if (c.getKm() < kilometros) { listak.agregarCoches(c); } } } public Coche mayorKm() { Coche aux = new Coche(); int numKm = 0; for (Coche c : lista) { if (c.getKm() > numKm) { numKm = c.getKm(); aux = c; } } return aux; } public boolean verifyAllEqualUsingALoop() { for (Coche s : lista) { if (!s.equals(lista.get(0))) return false; } return true; } /** * usando == para comparar coches equals tambien te serviria */ public void compararFinalConAnterior() { //si la lista contiene mas de 2 coches if(lista.size() >= 2) { final Coche ultimoCoche = lista.get(lista.size() - 1); final Coche penultimoCoche = lista.get(lista.size() - 2); if( ultimoCoche == (penultimoCoche) ) { LOGGER.info("El ultimo coche y penultimo son iguales"); final StringBuilder sb = new StringBuilder() .append("Ultimo coche: ") .append(ultimoCoche) .append("\nPenultimo coche: ") .append(penultimoCoche); LOGGER.info(sb.toString()); } else { LOGGER.info("El ultimo coche y penultimo son diferentes"); final StringBuilder sb = new StringBuilder() .append("Ultimo coche: ") .append(ultimoCoche) .append("\nPenultimo coche: ") .append(penultimoCoche); LOGGER.info(sb.toString()); } } } public void ordenadosPorKm() { int i, j; Coche aux; for (i = 0; i < lista.size() - 1; i++) for (j = 0; j < lista.size() - i - 1; j++) if (lista.get(j + 1).getKm() < lista.get(j).getKm()) { aux = lista.get(j + 1); lista.set(j + 1, lista.get(j)); lista.set(j, aux); } mostrarCoches(); } }
import java.util.ArrayList; /** * */ public class MainClass { public MainClass() { final Coche cocheFiesta = new Coche(); cocheFiesta.setMarca("Ford"); cocheFiesta.setMatricula("124141"); cocheFiesta.setKm(80); cocheFiesta.setModelo("Fiesta"); final Coche cocheFocus = new Coche(); cocheFocus.setMarca("Ford"); cocheFocus.setMatricula("415423"); cocheFocus.setKm(85); cocheFocus.setModelo("Focus"); final Coche cocheFiat = new Coche(); cocheFiat.setMarca("Fiat"); cocheFiat.setMatricula("4154223"); cocheFiat.setKm(95); cocheFiat.setModelo("Fiat volador"); final Coche cocheFiat2 = new Coche(); cocheFiat2.setMarca("Fiat"); cocheFiat2.setMatricula("4154223"); cocheFiat2.setKm(95); cocheFiat2.setModelo("Fiat volador"); final ArrayList<Coche> cocheList = new ArrayList<>(); cocheList.add(cocheFiesta); cocheList.add(cocheFocus); /* * Coches añadidos aqui iguales. */ cocheList.add(cocheFiesta); cocheList.add(cocheFiat); cocheList.add(cocheFiat); final ListaCoches listaCoches = new ListaCoches(); listaCoches.setLista(cocheList); listaCoches.compararFinalConAnterior(); } public static void main (String ... blalbal) { new MainClass(); } }
salida si los ultimos coches son iguales INFORMACIÓN: El ultimo coche y penultimo son iguales INFORMACIÓN: Ultimo coche: Auto # :3 Marca: Fiat Modelo: Fiat volador Matricula: 4154223 Kilometraje: 95 Penultimo coche: Auto # :3 Marca: Fiat Modelo: Fiat volador Matricula: 4154223 Kilometraje: 95
Mira lo que pasa así usemos == o equals final Coche cocheFiat = new Coche(); cocheFiat.setMarca("Fiat"); cocheFiat.setMatricula("4154223"); cocheFiat.setKm(95); cocheFiat.setModelo("Fiat volador"); final Coche cocheFiat2 = new Coche(); cocheFiat2.setMarca("Fiat"); cocheFiat2.setMatricula("4154223"); cocheFiat2.setKm(95); cocheFiat2.setModelo("Fiat volador");
y usamos en la comparacion del metodo compararFinalConAnterior() este serial el resultadoINFORMACIÓN: El ultimo coche y penultimo son diferentes INFORMACIÓN: Ultimo coche: Auto # :4 Marca: Fiat Modelo: Fiat volador Matricula: 4154223 Kilometraje: 95 Penultimo coche: Auto # :3 Marca: Fiat Modelo: Fiat volador Matricula: 4154223 Kilometraje: 95
que los autos son diferentes únicamente, lo que varia es el ID, y su referencia en memoria, pero todo los demás es igual. guarro no? veo que mejor compáralos por medio de sus getters, getter a getter, espero no haberte confundido
Título: Re: Arraylist
Publicado por: aitorBoole en 26 Mayo 2019, 16:47 pm
Mmmm... fui a intentar resolver tu duda en mi ordenador, pero el programa no tiene ni el método main. Las coas están algo desordenadas y no entiendo muy bien el ejercicio. Bueno, en caso de que tuviera el programa seria muy fácil, deberías pillar las dos ultimas posiciones del ArrayList de Coches, e ir comprobando cada una de las características de ambos coches y compararlas entre ellas. Para ello ayúdate de un contador. Te dejo un ejemplo que espero que se asemeje a los que andabas buscando:
Cada vez que ingreses un nuevo coche, deberás implementar un contador:
int cont = 0; cont ++;
Este contador llevara la posición de la Array de coches en la que el ultimo coche ingreso Una vez tengamos eso, lo demás es realmente sencillo:
if (ListaCoches.get(i-1).getModelo.equals(ListaCoches.get(i).getModelo){ }if (ListaCoches.get(i-1).getMatricula.equals(ListaCoches.get(i).getMatricula){ } if (ListaCoches.get(i-1).getAnyo == ListaCoches.get(i).getAnyo){ ...y seguiriamos asi comprbando todo los parametros... System.out.pintln ("El coche es igual al anterior");
}else{ System.out.println ("El coche es distinto al anterior"); }else{ System.out.println ("El coche es distinto al anterior"); }else{ System.out.println ("El coche es distinto al anterior");
Todo esto seria mas fácil si lo pones en un mismo "if". Yo te lo puse en varios para que lo veas mas claro, pero es una manera algo "chapucera" y poco elegante de hacerlo. Te dejo como seria aquello simplificado:
if ((ListaCoches.get(i-1).getModelo.equals(ListaCoches.get(i).getModelo)&&(ListaCoches.get(i-1).getMatricula.equals(ListaCoches.get(i).getMatricula)&& (ListaCoches.get(i-1).getAnyo == ListaCoches.get(i).getAnyo)){ System.out.pintln ("El coche es igual al anterior"); }else{ System.out.println ("El coche es distinto al anterior");
Espero haber resuelto tu duda, buena suerte!
Título: Re: Arraylist
Publicado por: CalgaryCorpus en 26 Mayo 2019, 17:30 pm
La comparacion con == compara referencias, no valores. Usa equals().
|