2013-08-16 17 views
5

Próbuję utworzyć listę tablic ciągów tablicowych. Kiedy skończę, chcę, aby lista tablic wyglądała tak:Tworzenie listy macierzy tablic

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

Próbowałem zdefiniować tablicę, a następnie dodać ją do listy tablic. Następnie ponownie zdefiniuj tablicę i dodaj ją ponownie. Ale tylko lista tablic zawiera ostatni wpis. Spójrz:

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("]"); 
} 

wyjście jest:

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

Każdy pomysł, w jaki sposób dodać każdy tablicy do mojej listy tablicy `

+0

ludzie już odpowiedzieli na twoje pytania, tylko komentarz dlaczego tego nie robisz? list2.add (nowy ciąg [] {"1", "0"}); –

Odpowiedz

6

Problem polega na tym, że dodajesz ten sam obiekt do każdego indeksu swojej tablicy ArrayList. Za każdym razem, gdy je modyfikujesz, modyfikujesz ten sam obiekt. Aby rozwiązać problem, musisz przekazać odniesienia do różnych obiektów.

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

możliwość dodawania taką samą tablicę t2 skończy? i koniec. Musisz dodać różne tablice.

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"}); 

Tak na marginesie: można używać Arrays.toString(tt) wewnątrz pętli formatować każdy String[] sposób robisz.

1

Tworzysz tylko jedną tablicę i umieszczasz jej odwołanie wielokrotnie w ArrayList.

Zamiast tego, można utworzyć nową tablicę dla każdego elementu w liście:

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

To dlatego, że jesteś dodając T2 do wszystkich wpisów. Za każdym razem, gdy nadpisujesz t2, zmieniasz wszystkie wartości. Dzieje się tak dlatego, że t2 nie jest przekazywana przez wartość, jest przekazywana przez referencję i zapisywana przez odniesienie.

1

Masz tylko jeden przedmiot (t2) i za każdym razem, gdy dodajesz go do tablicy ArrayList. w rzeczywistości odwołanie do t2 zostanie zapisane w tablicy ArrayList, więc po zmianie wartości t2 zostaną zastosowane wszystkie odwołania w ArrayList.