2013-08-16 261 views
5

我想創建一個數組列表的字符串數組。當我完成後,我想陣列列表看起來像這樣:創建陣列的數組列表

[0,0], [0,1], [1,0], [1,1,] 

我試圖定義一個數組,然後將其添加到數組列表中。然後重新定義一個數組並重新添加它。但數組列表似乎只包含最後一個條目。請看:

String[] t2 = new String[2]; 

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

t2[0]="0"; 
t2[1]="0"; 
list2.add(t2); 
t2[0]="0"; 
t2[1]="1"; 
list2.add(t2); 
t2[0]="1"; 
t2[1]="0"; 
list2.add(t2); 
t2[0]="1"; 
t2[1]="1"; 
list2.add(t2); 

for (String[] tt : list2) 
{ 
System.out.print("["); 
for (String s : tt) 
System.out.print(s+" "); 
System.out.print("]"); 
} 

輸出是:

[1,1] [1,1] [1,1] [1,1]

如何每個陣列添加到我的數組列表中的任何想法`

+0

人們已經回答了你的問題,只是一個評論你爲什麼不這樣做? list2.add(new String [] {「1」,「0」}); –

回答

6

問題是,您要將相同的對象添加到ArrayList的每個索引。每次修改它時,都會修改同一個對象。要解決該問題,您必須將引用傳遞給不同的對象。

String[] t2 = new String[2]; 

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

t2[0]="0"; 
t2[1]="0"; 
list2.add(t2); 

t2 = new String[2]; // create a new array 
t2[0]="0"; 
t2[1]="1"; 
list2.add(t2); 

t2 = new String[2]; 
t2[0]="1"; 
t2[1]="0"; 
list2.add(t2); 

t2 = new String[2]; 
t2[0]="1"; 
t2[1]="1"; 
list2.add(t2); 
4

您要添加的同一陣列t2結束了嗎?並結束。你需要添加不同的數組。

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

list2.add(new String[] {"0", "0"}); 
list2.add(new String[] {"0", "1"}); 
list2.add(new String[] {"1", "0"}); 
list2.add(new String[] {"1", "1"}); 

順便說一句:你可以使用Arrays.toString(tt)循環內每個String[]你正在做的方式進行格式化。

1

您只創建一個數組,並將其引用重複放入ArrayList中。

相反,你可以在列表中的每個元素創建一個新的數組:

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

String[] t2; 

t2 = new String[2]; 
t2[0]="0"; 
t2[1]="0"; 
list2.add(t2); 

t2 = new String[2]; 
t2[0]="0"; 
t2[1]="1"; 
list2.add(t2); 

t2 = new String[2]; 
t2[0]="1"; 
t2[1]="0"; 

t2 = new String[2]; 
list2.add(t2); 
t2[0]="1"; 
t2[1]="1"; 
list2.add(t2); 
2

這是因爲你要添加t2到所有條目。每次覆蓋t2時,你都在改變所有的值。這是因爲t2沒有被值傳遞,它是通過引用傳遞並通過引用保存的。

1

您只有一個項目(t2),並且每次將其添加到ArrayList。實際上t2的引用將保存在ArrayList中,因此當您更改t2值時,ArrayList中的所有引用都會生效。