0

我有一个数组列表,由于某些原因,它会覆盖所有以前的值,并且只返回最后添加的值。所以我有 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”始终是最后一个“HervormdeRij”的 2000 次(“hervormen”.size() 的数量)。我真的没有在我的代码中看到错误吗?(而且我 1000% 确定“hervormen”!= 2000 倍相同的值。)

提前致谢

4

5 回答 5

6

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

ArrayList<String> rij = new ArrayList<String>();
while (teller < hervormen.size()){
    HervormdeRij HervormdeRij = new HervormdeRij();
    rij=    hervormen.get(teller);
    ...
于 2012-05-10T15:42:03.773 回答
3

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

所以你只需要移动这条线:

HervormdeRij HervormdeRij = new HervormdeRij();

循环内。

于 2012-05-10T15:42:23.477 回答
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;
}
于 2012-05-10T15:42:52.913 回答
1
  • 重命名 as 以免与其他代码阅读混淆。 HervormdeRij HervormdeRij = new HervormdeRij();变成HervormdeRij hr = new HervormdeRij();.

  • 将它移到你的while()循环中,这样每次通过,你都会得到 type 的新实例HermorvdeRij

于 2012-05-10T15:43:50.573 回答
1

尝试在每次迭代中实例化一个新的 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++;
    }
}
于 2012-05-10T15:46:58.917 回答