Class ArrayList repeats the same value

1

I have a ArrayList of class, when loading it in the following way:

ArrayList<Diccionario>  puertaHabitacion= new ArrayList<Diccionario>();
Diccionario puertaHab=new Diccionario();
puertaHab.setClave("Puerta Cocina");
puertaHab.setValor("Cocina");
puertaHabitacion.add(puertaHab);

puertaHab.setClave("Puerta Estudio");
puertaHab.setValor("Estudio");
puertaHabitacion.add(puertaHab);

puertaHab.setClave("Puerta Baño");
puertaHab.setValor("Baño");
puertaHabitacion.add(puertaHab);

puertaHab.setClave("Puerta Principal");
puertaHab.setValor("Principal");
puertaHabitacion.add(puertaHab);

In this particular example and entered 4 objects of type Dictionary in ArrayList however when printing the ArrayList complete the last entered values are repeated, that is to say in all the values I get as keys "Main Door" and as "Main" values

Because this error occurs and how I can solve this problem

    
asked by Leo T 04.01.2019 в 11:56
source

1 answer

5

The problem comes because you use the same object Diccionario and this causes that when you change a value of this it is changed in all the sites.

To solve this you have to create a new object Diccionario before adding new values.

ArrayList<Diccionario>  puertaHabitacion = new ArrayList<Diccionario>();
Diccionario puertaHab = new Diccionario();
puertaHab.setClave("Puerta Cocina");
puertaHab.setValor("Cocina");
puertaHabitacion.add(puertaHab);

puertaHab=new Diccionario();
puertaHab.setClave("Puerta Estudio");
puertaHab.setValor("Estudio");
puertaHabitacion.add(puertaHab);

puertaHab=new Diccionario();
puertaHab.setClave("Puerta Baño");
puertaHab.setValor("Baño");
puertaHabitacion.add(puertaHab);

puertaHab=new Diccionario();
puertaHab.setClave("Puerta Principal");
puertaHab.setValor("Principal");
puertaHabitacion.add(puertaHab);

I think the name of the variable can keep it, but you need to re-initialize it.

If you want to do it in a loop, it would be something like this:

 ArrayList<Diccionario>  puertaHabitacion = new ArrayList<Diccionario>();
 Diccionario puertaHab;
 int cantidad_puerta = 4;
 String[] clave_puerta = ["Puerta Cocina","Puerta Estudio","Puerta Baño","Puerta Principal"];
 String[] valor_puerta = ["Cocina","Estudio","Baño","Principal"];
 for(int i = 0; i < cantidad_puerta; i++)
 {
    puertaHab = new Diccionario();
    puertaHab.setClave(clave_puerta[i]);
    puertaHab.setValor(valor_puerta[i]);
    puertaHabitacion.add(puertaHab);
 }
    
answered by 04.01.2019 в 12:04