2013-08-16 18 views
5

Dize dizilerinin bir dizi listesini oluşturmaya çalışıyorum. Bu işlemin sonucunda, ben dizi listesi bu gibi görünmek istiyorum: ben denedimDizilerin arraylistini oluşturma

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

bir dizi tanımlamak ve sonra dizi listesine eklemek için. Ardından bir diziyi yeniden tanımlayıp tekrar ekleyin. Ancak dizi listesi sadece son girişi içerdiği görülmektedir.

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

çıkışı: bir göz atın

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

benim dizi listesine her diziyi ekleme hakkında herhangi bir fikir `

+0

kişi sorularınızı zaten yanıtladı, sadece bir yorum neden bunu yapmıyorsunuz? list2.add (yeni Dize [] {"1", "0"}); –

cevap

6

Sorun, aynı nesneyi ArrayList öğenizin her dizine eklediğinizdir. Her değiştirdiğinizde, aynı nesneyi değiştiriyorsunuz. Sorunu çözmek için farklı nesnelere referanslar göndermeniz gerekir.

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

Sen tekrar aynı diziyi t2 ekliyoruz? ve bitti. Farklı diziler eklemeniz gerekiyor. Olarak bir kenara

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

: Eğer yapıyorsun her String[] şekilde biçimlendirmek için döngü içinde Arrays.toString(tt) kullanabilirsiniz.

1

Yalnızca bir dizi oluşturuyorsunuz ve referansını art arda ArrayList'e koyuyorsunuz.

Bunun yerine, Listesi'nde her element için yeni bir dizi oluşturabilirsiniz: Eğer tüm girdilere t2 ekliyoruz çünkü

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

budur. T2'nin üzerine yazdığınız her zaman tüm değerleri değiştirirsiniz. Bunun nedeni t2'nin değere geçirilmemesi, referans olarak iletilmesi ve referans olarak kaydedilmesidir.

1

Sadece bir öğe (t2) var ve her ArrayList uygulamasına eklediğinizde. Aslında t2'nin referansı ArrayList'e kaydedilecektir, böylece Ar2 Listesindeki tüm referanslar t2 değerini değiştirdiğinizde etkindir.

İlgili konular