2012-05-10 90 views
0

我有一個arraylist,由於某些原因,它覆蓋了所有以前的值,只返回最後一個值。所以我有3個對象添加,將有3倍的數組中的最後一個對象。下面的代碼:(抱歉的變量不是英語):Arraylist填寫lastValue我補充

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次最後的 「HervormdeRij」( 「hervormen」 .size()的量)。我在代碼中看不到錯誤? (而我1000%肯定「hervormen」!=相同的值的2000倍。)

由於提前

+0

仍然不能理解的問題。 –

+0

您的示例代碼是否正確?它看起來像實例變量是類名相同,你調用類的靜態方法,而不是實例方法。 –

回答

6

你需要移動HervormdeRij HervormdeRij = new HervormdeRij();內環路,或者你能不能讓每一次添加相同的對象:

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

謝謝! :) 我不知道。 – Nick

3

你只實例(前環)一個HervormedeRij對象和你重用每次。

所以你只需要移動這條線:

HervormdeRij HervormdeRij = new HervormdeRij(); 

內循環。

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; 
} 
1
  • 重命名爲不引起與其他代碼讀取混亂。 HervormdeRij HervormdeRij = new HervormdeRij();變成HervormdeRij hr = new HervormdeRij();

  • 將它移動到while()循環中,以便每次都會得到類型爲HermorvdeRij的新實例。

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++; 
    } 
}