我有一个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倍。)
先谢谢
答案 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++;
}
}