Nick
Nick

Reputation: 575

Arraylist fills himself with lastValue i added

i have an arraylist, and for some reasons it overwrites all previous values and only returns the last value added. So i have 3 objects to add, there will be 3 times the last object in the array. Here's the code: (sorry the variables aren't english):

public class Convertor {
ArrayList<ArrayList<String>> hervormen = new ArrayList<ArrayList<String>>();
String Voornaam;
public Convertor(ArrayList<ArrayList<String>> hervormen)
{
    this.hervormen=hervormen;
}
public ArrayList<HervormdeRij> Hervormen(){
    ArrayList<HervormdeRij> hervormd = new ArrayList<HervormdeRij>();
    HervormdeRij HervormdeRij = new HervormdeRij();
    int teller = 0;
    ArrayList<String> rij = new ArrayList<String>();
    while (teller < hervormen.size()){
        rij=    hervormen.get(teller);

        HervormdeRij.setDag(rij0(rij));
        HervormdeRij.setUur(rij1(rij));
        HervormdeRij.setDokterId(rij2DokterId(rij));
        HervormdeRij.setDuur(rij2Duur(rij));
        HervormdeRij.setAchternaam(rij5(rij));
        HervormdeRij.setVoornaam(Voornaam);
        HervormdeRij.setAdress(rij6(rij));
        HervormdeRij.setGemeente(rij7(rij));
        HervormdeRij.setTel(rij8(rij));
        HervormdeRij.setCommentaar(rij10(rij));
        HervormdeRij.setEmail(rij11(rij));


        hervormd.add(HervormdeRij);

        teller++;
    }



    return hervormd;

So "hervormd" is always 2000 times(the amount of "hervormen".size()) the last "HervormdeRij". I really don't see an error in my code? (And I Am 1000% sure that "hervormen" != 2000 times the same value.)

Thanks in Advance

Upvotes: 0

Views: 144

Answers (5)

Nacho321
Nacho321

Reputation: 1991

Try to instantiate a new HervormdeRij in each iteration of the while. So it would look like this:

public ArrayList<HervormdeRij> Hervormen(){
    ArrayList<HervormdeRij> hervormd = new ArrayList<HervormdeRij>();
    HervormdeRij HervormdeRij;
    int teller = 0;
    ArrayList<String> rij = new ArrayList<String>();
    while (teller < hervormen.size()){
        HervormdeRij = new HervormdeRij();
        rij=    hervormen.get(teller);

        HervormdeRij.setDag(rij0(rij));
        HervormdeRij.setUur(rij1(rij));
        HervormdeRij.setDokterId(rij2DokterId(rij));
        HervormdeRij.setDuur(rij2Duur(rij));
        HervormdeRij.setAchternaam(rij5(rij));
        HervormdeRij.setVoornaam(Voornaam);
        HervormdeRij.setAdress(rij6(rij));
        HervormdeRij.setGemeente(rij7(rij));
        HervormdeRij.setTel(rij8(rij));
        HervormdeRij.setCommentaar(rij10(rij));
        HervormdeRij.setEmail(rij11(rij));


        hervormd.add(HervormdeRij);

        teller++;
    }
}

Upvotes: 1

Makoto
Makoto

Reputation: 106498

  • Rename the as to not cause confusion with other code reading. HervormdeRij HervormdeRij = new HervormdeRij(); becomes HervormdeRij hr = new HervormdeRij();.

  • Move it inside of your while() loop, so that every time through, you get new instances of type HermorvdeRij.

Upvotes: 1

Luiggi Mendoza
Luiggi Mendoza

Reputation: 85789

You must initialize a new instance of your object before adding it in the array. Also, try to not define a variable with the class name, I changed the name of HervormdeRij variable to hervormdeRij

public ArrayList<HervormdeRij> Hervormen(){
    ArrayList<HervormdeRij> hervormd = new ArrayList<HervormdeRij>();
    HervormdeRij hervormdeRij;
    int teller = 0;
    ArrayList<String> rij = new ArrayList<String>();
    while (teller < hervormen.size()){
        rij=    hervormen.get(teller);
        hervormdeRij = new HervormdeRij();
        hervormdeRij.setDag(rij0(rij));
        hervormdeRij.setUur(rij1(rij));
        hervormdeRij.setDokterId(rij2DokterId(rij));
        hervormdeRij.setDuur(rij2Duur(rij));
        hervormdeRij.setAchternaam(rij5(rij));
        hervormdeRij.setVoornaam(Voornaam);
        hervormdeRij.setAdress(rij6(rij));
        hervormdeRij.setGemeente(rij7(rij));
        hervormdeRij.setTel(rij8(rij));
        hervormdeRij.setCommentaar(rij10(rij));
        hervormdeRij.setEmail(rij11(rij));

        hervormd.add(HervormdeRij);
        teller++;
    }

    return hervormd;
}

Upvotes: 1

ChristopheD
ChristopheD

Reputation: 116287

You only instantiate one HervormedeRij object (before the loop) and you reuse that every time.

So you just need to move this line:

HervormdeRij HervormdeRij = new HervormdeRij();

inside the loop.

Upvotes: 3

assylias
assylias

Reputation: 328855

You need to move HervormdeRij HervormdeRij = new HervormdeRij(); inside the loop, or you will keep adding the same object every time:

ArrayList<String> rij = new ArrayList<String>();
while (teller < hervormen.size()){
    HervormdeRij HervormdeRij = new HervormdeRij();
    rij=    hervormen.get(teller);
    ...

Upvotes: 6

Related Questions