Arraylist填写了lastValue我补充说

时间:2012-05-10 15:39:15

标签: java arraylist

我有一个arraylist,由于某些原因,它会覆盖所有以前的值,只返回最后添加的值。所以我要添加3个对象,这将是数组中最后一个对象的3倍。这是代码:(抱歉变量不是英文):

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;

所以“hervormd”总是2000次(“hervormen”.size()的数量)最后一次“HervormdeRij”。我真的没有看到我的代码中的错误? (而且我1000%肯定“hervormen”!=相同值的2000倍。)

先谢谢

5 个答案:

答案 0 :(得分:6)

您需要在循环中移动HervormdeRij HervormdeRij = new HervormdeRij();,否则每次都会添加相同的对象:

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

答案 1 :(得分:3)

您只实例化一个HervormedeRij对象(在循环之前),并且每次都重复使用它。

所以你只需要移动这一行:

HervormdeRij HervormdeRij = new HervormdeRij();

在循环中。

答案 2 :(得分:1)

在将对象添加到数组中之前,必须初始化对象的新实例。另外,尝试不使用类名定义变量,我将HervormdeRij变量的名称更改为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;
}

答案 3 :(得分:1)

  • 重命名为不与其他代码读取混淆。 HervormdeRij HervormdeRij = new HervormdeRij();变为HervormdeRij hr = new HervormdeRij();

  • 将其移至while()循环内,以便每次都能获得HermorvdeRij类型的新实例。

答案 4 :(得分:1)

尝试在while的每次迭代中实例化一个新的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()){
        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++;
    }
}