Arraylist

Iniciado por luis9829, 26 Mayo 2019, 00:39 AM

0 Miembros y 1 Visitante están viendo este tema.

luis9829

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

rub'n

Que tal ?

Como ?

se debe Comparar un coche con su anteriormente ingresado, formula mejor la descripción


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

luis9829

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

rub'n

#3
Cita de: 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


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


Código (java) [Seleccionar]

   /**
    * 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());

           }
       }
   }


Código (java) [Seleccionar]


import java.util.Objects;

/**
* @implSpec NO-THREAD-SAFE
*/
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 = ++aux;
       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 int hashCode() {
       return Objects.hash(numCarros, matricula, marca, modelo, Km);
   }

   @Override
   public String toString() {
       return "Auto # :" + numCarros + "\n Marca: " + this.getMarca() + "\n Modelo: " + modelo +
               "\n Matricula: " + this.getMatricula() + "\n Kilometraje: " + Km;
   }


}



Código (java) [Seleccionar]


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) {
           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 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();
   }
}


Código (java) [Seleccionar]

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


Código (bash) [Seleccionar]

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

Código (java) [Seleccionar]

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 resultado

Código (bash) [Seleccionar]

INFORMACIÓ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


rubn0x52.com KNOWLEDGE  SHOULD BE FREE!!!
If you don't have time to read, you don't have the time (or the tools) to write, Simple as that. Stephen

aitorBoole

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!
     
Salu2, Aitor

CalgaryCorpus

La comparacion con == compara referencias, no valores. Usa equals().

Aqui mi perfil en LinkedIn, invitame un cafe aqui