2013-08-16 38 views
5

Tôi đang cố gắng tạo danh sách mảng mảng chuỗi. Khi tôi hoàn thành, tôi muốn danh sách mảng trông như thế này:Tạo danh sách mảng các mảng

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

Tôi đã cố xác định một mảng rồi thêm nó vào danh sách mảng. Sau đó xác định lại một mảng và thêm nó một lần nữa. Nhưng danh sách mảng chỉ dường như chứa mục nhập cuối cùng. Hãy xem:

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

Đầu ra là:

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

Bất kỳ ý tưởng về cách thêm từng mảng array list của tôi '

+0

mọi người đã trả lời câu hỏi của bạn, chỉ là nhận xét tại sao bạn không làm điều này? list2.add (chuỗi mới [] {"1", "0"}); –

Trả lời

6

Vấn đề là bạn đang thêm cùng một đối tượng vào từng chỉ mục của ArrayList của bạn. Mỗi khi bạn sửa đổi nó, bạn đang sửa đổi cùng một đối tượng. Để giải quyết vấn đề, bạn phải chuyển tham chiếu đến các đối tượng khác nhau.

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

Bạn đang thêm cùng mảng t2 kết thúc? và kết thúc. Bạn cần thêm các mảng riêng biệt.

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

Là một sang một bên: bạn có thể sử dụng Arrays.toString(tt) bên trong vòng lặp để định dạng mỗi String[] cách bạn đang làm.

1

Bạn chỉ đang tạo một mảng và đặt tham chiếu của nó nhiều lần vào ArrayList.

Thay vào đó, bạn có thể tạo một mảng mới cho mỗi phần tử trong danh sách:

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

Điều này là do bạn đang thêm t2 đến tất cả các mục. Mỗi lần bạn ghi đè lên t2, bạn sẽ thay đổi tất cả các giá trị. Điều này là do t2 không được truyền theo giá trị, nó đang được truyền qua tham chiếu và được lưu bằng tham chiếu.

1

Bạn chỉ có một mục (t2) và mỗi lần bạn thêm nó vào ArrayList. thực sự tham chiếu của t2 sẽ được lưu trong ArrayList vì vậy khi bạn thay đổi giá trị t2, tất cả các tham chiếu trong ArrayList sẽ có hiệu lực.