2011-04-11 103 views
0

我創建了一個數組列表,並在DO While循環中向它添加了元素(字符串數組)。我用下面的添加元素:arraylist複製的元素

tempList.add(recordArray); //- recordArray is a String[] 

//ArrayList<String[]> tempList = new ArrayList<String[]>();// is declared in the activity before onCreate method 

如果我WHILE循環使用以下代碼檢查DO中的陣列:

aStringArray = tempList.get(index); 
Log.i(TAG,"aStringArray[0] = " + aStringArray[3]); 
index++; 

我得到正確的字符串的每個添加的3種數組元素的到arrayList。

問題是,當我嘗試在DO WHILE循環外使用相同的代碼時,爲3次迭代中的每一次都顯示相同的字符串。

所以總結一下,在do while循環,我得到如下:

1st iteration - aStringArray[3] - displays "100350 
2nd iteration - aStringArray[3] - displays "100750 
3rd iteration - aStringArray[3] - displays "100800 

的DO之外WHILE循環,我得到如下:

1st iteration - aStringArray[3] - displays "100800 
2nd iteration - aStringArray[3] - displays "100800 
3rd iteration - aStringArray[3] - displays "100800 

我已經找遍了爲一個答案,但無法找到一個。希望這裏有人能幫忙。

大加讚賞

克萊夫

+1

你能發佈代碼嗎?我不能真正按照你在這裏說的話。 – James 2011-04-11 19:46:38

+1

你可以給我們你在循環外使用的**特定**代碼來顯示這些迭代嗎? – QuantumMechanic 2011-04-11 19:46:54

回答

2

我強烈懷疑你添加每次經過循環時間相同字符串數組。您應該每次創建一個新的字符串數組。

不要忘記,列表只包含引用。所以我的猜測是,你的代碼如下所示:

ArrayList<String[]> tempList = new ArrayList<String[]>(); 
String[] recordArray = new String[4]; 

for (int i = 0; i < 10; i++) 
{ 
    recordArray[0] = "a" + i; 
    recordArray[1] = "b" + i; 
    recordArray[2] = "c" + i; 
    recordArray[3] = "d" + i; 
    tempList.add(recordArray); 
} 

與10的ArrayList相同的標記結束。相反,你要這樣:

ArrayList<String[]> tempList = new ArrayList<String[]>(); 

for (int i = 0; i < 10; i++) 
{ 
    String[] recordArray = new String[4]; 
    recordArray[0] = "a" + i; 
    recordArray[1] = "b" + i; 
    recordArray[2] = "c" + i; 
    recordArray[3] = "d" + i; 
    tempList.add(recordArray); 
} 

你有10個列表中的不同數組的引用的方式。

+0

非常感謝。那是我的問題。我完全困惑的事實是,當我嘗試從列表中提取字符串時,在Do-WHILE循環中它完美地工作,但當我使用相同的循環提取字符串但在DO-WHILE循環之外時,我得到了相同的字符串反覆。非常感謝您的幫助 – idig 2011-04-12 08:01:52

0

你還沒有發佈你的代碼,所以我必須猜測,但它聽起來像你多次添加相同的String[]到你的列表中,並且只是在你的循環的每次迭代中修改單個數組實例。

您需要確保在每次迭代中實際分配一個新數組。例如:應該有這樣一行:

recordArray = new String[size]; 

在你的循環中。

+0

非常感謝。那是我的問題。我改變了我的代碼,它的工作完美。再次感謝 – idig 2011-04-12 08:02:55