Foro de elhacker.net

Programación => Java => Mensaje iniciado por: luis9829 en 26 Mayo 2019, 00:39 am



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
Código:
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

Código:
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.


Código
  1.    /**
  2.      * usando == para comparar coches equals también te serviría
  3.      */
  4.    public void compararFinalConAnterior() {
  5.        //si la lista contiene mas de 2 coches
  6.        if(lista.size() >= 2) {
  7.            final Coche ultimoCoche = lista.get(lista.size() - 1);
  8.            final Coche penultimoCoche  = lista.get(lista.size() - 2);
  9.  
  10.            if( ultimoCoche == (penultimoCoche) ) {
  11.  
  12.                LOGGER.info("El ultimo coche y penultimo son iguales");
  13.                final StringBuilder sb = new StringBuilder()
  14.                    .append("Ultimo coche: ")
  15.                        .append(ultimoCoche)
  16.                        .append("\nPenultimo coche: ")
  17.                        .append(penultimoCoche);
  18.                LOGGER.info(sb.toString());
  19.  
  20.            } else {
  21.  
  22.                LOGGER.info("El ultimo coche y penultimo son diferentes");
  23.                final StringBuilder sb = new StringBuilder()
  24.                        .append("Ultimo coche: ")
  25.                        .append(ultimoCoche)
  26.                        .append("\nPenultimo coche: ")
  27.                        .append(penultimoCoche);
  28.                LOGGER.info(sb.toString());
  29.  
  30.            }
  31.        }
  32.    }

Código
  1.  
  2. import java.util.Objects;
  3.  
  4. /**
  5.  * @implSpec NO-THREAD-SAFE
  6.  */
  7. public class Coche {
  8.  
  9.    // Atributos
  10.    private static int aux = 0;
  11.    private final int numCarros;
  12.    private String matricula;
  13.    private String marca;
  14.    private String modelo;
  15.    private int Km;
  16.  
  17.    // Getters y setters
  18.    public String getMatricula() {
  19.        return matricula;
  20.    }
  21.  
  22.    public void setMatricula(String matricula) {
  23.        this.matricula = matricula;
  24.    }
  25.  
  26.    public String getMarca() {
  27.        return marca;
  28.    }
  29.  
  30.    public void setMarca(String marca) {
  31.        this.marca = marca;
  32.    }
  33.  
  34.    public String getModelo() {
  35.        return modelo;
  36.    }
  37.  
  38.    public void setModelo(String modelo) {
  39.        this.modelo = modelo;
  40.    }
  41.  
  42.    public int getKm() {
  43.        return Km;
  44.    }
  45.  
  46.    public void setKm(int km) {
  47.        Km = km;
  48.    }
  49.  
  50.    public static int getAux() {
  51.        return aux;
  52.    }
  53.  
  54.    public static void setAux(int aux) {
  55.        Coche.aux = aux;
  56.    }
  57.  
  58.    public int getNumCarros() {
  59.        return numCarros;
  60.    }
  61.  
  62.    // constructor por defecto
  63.    public Coche() {
  64.        this.numCarros = ++aux;
  65.        this.matricula = "";
  66.        this.marca = "";
  67.        this.modelo = "";
  68.        Km = 0;
  69.    }
  70.  
  71.    // constructor
  72.    public Coche(String vmarca, String vmatricula, String vmodelo, int vkm) {
  73.        numCarros = ++aux;
  74.        this.marca = vmarca;
  75.        this.matricula = vmatricula;
  76.        this.modelo = vmodelo;
  77.        Km = vkm;
  78.    }
  79.  
  80.  
  81.    @Override
  82.    public boolean equals(Object obj) {
  83.        if (this == obj)
  84.            return true;
  85.        if (obj == null)
  86.            return false;
  87.        if (getClass() != obj.getClass())
  88.            return false;
  89.        Coche other = (Coche) obj;
  90.        if (Km != other.Km)
  91.            return false;
  92.        if (marca == null) {
  93.            if (other.marca != null)
  94.                return false;
  95.        } else if (!marca.equals(other.marca))
  96.            return false;
  97.        if (matricula == null) {
  98.            if (other.matricula != null)
  99.                return false;
  100.        } else if (!matricula.equals(other.matricula))
  101.            return false;
  102.        if (modelo == null) {
  103.            if (other.modelo != null)
  104.                return false;
  105.        } else if (!modelo.equals(other.modelo))
  106.            return false;
  107.        if (numCarros != other.numCarros)
  108.            return false;
  109.        return true;
  110.    }
  111.  
  112.    @Override
  113.    public int hashCode() {
  114.        return Objects.hash(numCarros, matricula, marca, modelo, Km);
  115.    }
  116.  
  117.    @Override
  118.    public String toString() {
  119.        return "Auto # :" + numCarros + "\n Marca: " + this.getMarca() + "\n Modelo: " + modelo +
  120.                "\n Matricula: " + this.getMatricula() + "\n Kilometraje: " + Km;
  121.    }
  122.  
  123.  
  124. }


Código
  1.  
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. import java.util.logging.Logger;
  5.  
  6. public class ListaCoches {
  7.  
  8.    private ArrayList<Coche> lista;
  9.    private static final Logger LOGGER = Logger.getLogger(ListaCoches.class.getSimpleName());
  10.  
  11.    public ArrayList<Coche> getLista() {
  12.        return lista;
  13.    }
  14.  
  15.    public void setLista(ArrayList<Coche> lista) {
  16.        this.lista = lista;
  17.    }
  18.  
  19.    public ListaCoches() {
  20.        this.lista = new ArrayList<Coche>();
  21.    }
  22.  
  23.    // metodos
  24.    public void mostrarCoches() {
  25.        for (Coche c : lista) {
  26.            System.out.println(c);
  27.        }
  28.    }
  29.  
  30.    public void agregarCoches(Coche c1) {
  31.        lista.add(c1);
  32.    }
  33.  
  34.    public void mostrarPorMarca(String marca) {
  35.        ListaCoches listam = new ListaCoches();
  36.        for (Coche c : lista) {
  37.            if (c.getMarca().equals(marca)) {
  38.                listam.agregarCoches(c);
  39.                System.out.println(c);
  40.            }
  41.        }
  42.    }
  43.  
  44.    public void mostrarPorKm(int kilometros) {
  45.        ListaCoches listak = new ListaCoches();
  46.        for (Coche c : lista) {
  47.            if (c.getKm() < kilometros) {
  48.                listak.agregarCoches(c);
  49.                System.out.println(c);
  50.            }
  51.        }
  52.    }
  53.  
  54.    public Coche mayorKm() {
  55.        Coche aux = new Coche();
  56.        int numKm = 0;
  57.        for (Coche c : lista) {
  58.            if (c.getKm() > numKm) {
  59.                numKm = c.getKm();
  60.                aux = c;
  61.            }
  62.        }
  63.        return aux;
  64.    }
  65.  
  66.    public boolean verifyAllEqualUsingALoop() {
  67.        for (Coche s : lista) {
  68.            if (!s.equals(lista.get(0)))
  69.                return false;
  70.        }
  71.        return true;
  72.    }
  73.  
  74.    /**
  75.      * usando == para comparar coches equals tambien te serviria
  76.      */
  77.    public void compararFinalConAnterior() {
  78.        //si la lista contiene mas de 2 coches
  79.        if(lista.size() >= 2) {
  80.            final Coche ultimoCoche = lista.get(lista.size() - 1);
  81.            final Coche penultimoCoche  = lista.get(lista.size() - 2);
  82.  
  83.            if( ultimoCoche == (penultimoCoche) ) {
  84.  
  85.                LOGGER.info("El ultimo coche y penultimo son iguales");
  86.                final StringBuilder sb = new StringBuilder()
  87.                    .append("Ultimo coche: ")
  88.                        .append(ultimoCoche)
  89.                        .append("\nPenultimo coche: ")
  90.                        .append(penultimoCoche);
  91.                LOGGER.info(sb.toString());
  92.  
  93.            } else {
  94.  
  95.                LOGGER.info("El ultimo coche y penultimo son diferentes");
  96.                final StringBuilder sb = new StringBuilder()
  97.                        .append("Ultimo coche: ")
  98.                        .append(ultimoCoche)
  99.                        .append("\nPenultimo coche: ")
  100.                        .append(penultimoCoche);
  101.                LOGGER.info(sb.toString());
  102.  
  103.            }
  104.        }
  105.    }
  106.  
  107.    public void ordenadosPorKm() {
  108.        int i, j;
  109.        Coche aux;
  110.        for (i = 0; i < lista.size() - 1; i++)
  111.            for (j = 0; j < lista.size() - i - 1; j++)
  112.                if (lista.get(j + 1).getKm() < lista.get(j).getKm()) {
  113.                    aux = lista.get(j + 1);
  114.                    lista.set(j + 1, lista.get(j));
  115.                    lista.set(j, aux);
  116.                }
  117.  
  118.  
  119.        mostrarCoches();
  120.    }
  121. }

Código
  1. import java.util.ArrayList;
  2.  
  3. /**
  4.  *
  5.  */
  6. public class MainClass {
  7.  
  8.    public MainClass() {
  9.        final Coche cocheFiesta = new Coche();
  10.        cocheFiesta.setMarca("Ford");
  11.        cocheFiesta.setMatricula("124141");
  12.        cocheFiesta.setKm(80);
  13.        cocheFiesta.setModelo("Fiesta");
  14.  
  15.        final Coche cocheFocus = new Coche();
  16.        cocheFocus.setMarca("Ford");
  17.        cocheFocus.setMatricula("415423");
  18.        cocheFocus.setKm(85);
  19.        cocheFocus.setModelo("Focus");
  20.  
  21.        final Coche cocheFiat = new Coche();
  22.        cocheFiat.setMarca("Fiat");
  23.        cocheFiat.setMatricula("4154223");
  24.        cocheFiat.setKm(95);
  25.        cocheFiat.setModelo("Fiat volador");
  26.  
  27.        final Coche cocheFiat2 = new Coche();
  28.        cocheFiat2.setMarca("Fiat");
  29.        cocheFiat2.setMatricula("4154223");
  30.        cocheFiat2.setKm(95);
  31.        cocheFiat2.setModelo("Fiat volador");
  32.  
  33.        final ArrayList<Coche> cocheList = new ArrayList<>();
  34.        cocheList.add(cocheFiesta);
  35.        cocheList.add(cocheFocus);
  36.        /*
  37.          * Coches añadidos aqui iguales.
  38.          */
  39.        cocheList.add(cocheFiesta);
  40.        cocheList.add(cocheFiat);
  41.        cocheList.add(cocheFiat);
  42.  
  43.        final ListaCoches listaCoches = new ListaCoches();
  44.        listaCoches.setLista(cocheList);
  45.        listaCoches.compararFinalConAnterior();
  46.  
  47.    }
  48.  
  49.    public static void main(String ...blalbal) {
  50.        new MainClass();
  51.    }
  52. }
  53.  

salida si los ultimos coches son iguales


Código
  1. INFORMACIÓN: El ultimo coche y penultimo son iguales
  2. INFORMACIÓN: Ultimo coche: Auto # :3
  3. Marca: Fiat
  4. Modelo: Fiat volador
  5. Matricula: 4154223
  6. Kilometraje: 95
  7. Penultimo coche: Auto # :3
  8. Marca: Fiat
  9. Modelo: Fiat volador
  10. Matricula: 4154223
  11. Kilometraje: 95

Mira lo que pasa así usemos == o equals

Código
  1.  
  2. final Coche cocheFiat = new Coche();
  3. cocheFiat.setMarca("Fiat");
  4. cocheFiat.setMatricula("4154223");
  5. cocheFiat.setKm(95);
  6. cocheFiat.setModelo("Fiat volador");
  7.  
  8. final Coche cocheFiat2 = new Coche();
  9. cocheFiat2.setMarca("Fiat");
  10. cocheFiat2.setMatricula("4154223");
  11. cocheFiat2.setKm(95);
  12. cocheFiat2.setModelo("Fiat volador");

y usamos en la comparacion del metodo compararFinalConAnterior() este serial el resultado

Código
  1. INFORMACIÓN: El ultimo coche y penultimo son diferentes
  2. INFORMACIÓN: Ultimo coche: Auto # :4
  3. Marca: Fiat
  4. Modelo: Fiat volador
  5. Matricula: 4154223
  6. Kilometraje: 95
  7. Penultimo coche: Auto # :3
  8. Marca: Fiat
  9. Modelo: Fiat volador
  10. Matricula: 4154223
  11. Kilometraje: 95
  12.  

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().