2013-10-29 12 views
29

2D dizisinin en iyi baskı yönteminin ne olduğunu merak ediyordum. Bu benim sahip olduğum bir kod ve ben bunun iyi bir uygulama olup olmadığını merak ediyorum. Ayrıca, bulursanız bu kodda yaptığım diğer hatalarda beni düzeltin. Teşekkürler!Java - 2D dizi yazdırmanın en iyi yolu?

int rows = 5; 
int columns = 3; 

int[][] array = new int[rows][columns]; 

for(int i = 0; i<rows; i++) 
    for(int j = 0; j<columns; j++) 
     array[i][j] = 0; 

for(int i = 0; i<rows; i++) 
{ 
    for(int j = 0; j<columns; j++) 
    { 
     System.out.print(array[i][j]); 
    } 
    System.out.println(); 
} 
+3

En iyi - hangi tanıma göre? –

+0

Gerçek dizi uzunluklarını kullansalar için döngüleriniz daha güvenli olur. –

+1

Bu soru, konu dışı bir soru olmaksızın kodun gözden geçirilmesiyle ilgilidir ve [codereview.se] –

cevap

77

Basit bir şekilde yazdırabilirsiniz. Aşağıda

kullanın 1D Array yazdırmak için aşağıdaki 2D dizi

int[][] array = new int[rows][columns]; 
System.out.println(Arrays.deepToString(array)); 

kullanın yazdırmak için

int[] array = new int[size]; 
System.out.println(Arrays.toString(array)); 
+3

2D versiyonu baskılar her şey :( –

+0

@DangManhTroung daha sonra bir baskı çizgisi için bir for döngüsü yazıyor – JakeWilson801

+3

Bunun biraz geç olduğunu biliyorum, ancak bu her şeyi ayrı satırlarda yazdırıyor.[Bunu bu cevaptan aldım] (https://stackoverflow.com/questions/12845208/how-to-print-two-dimensional-array-like-table#17423410) 'System.out.println (Arrays.deepToString (twoDm) .replace ("],", "] \ n")); ' – wanderer0810

5

ne varsa yanlış bir şey yoktur. Döngüler için çift yuva kodunuzu okuyan herkes tarafından kolayca sindirilmelidir. Bu, aşağıdaki formülasyonun daha yoğun ve daha idiyomik bir java olduğunu söylemiştir. Arrays ve Collections gibi statik yardımcı program sınıflarının bazılarını daha geç ertelemeyi öneririm. Boilerplate tonları verimli kullanımlarıyla traşlanabilir.

ASHIKA cevabı sen (0,0) Normal CS kongre başına üst, sol köşesinde, içinde temsil edilmesini istiyoruz fevkalade çalışır @
for (int[] row : array) 
{ 
    Arrays.fill(row, 0); 
    System.out.println(Arrays.toString(row)); 
} 
+0

Bu çözüm dizinizi sol üst köşede (0,0) ile yazdıracaktır. görüntüdeki GUI yerleşimi veya Piksel konumu olarak. Birçok non-cs senaryosunda sol alt köşede (0,0) olmasını istersiniz, bu durumda foreach döngüsü çalışmayacaktır. –

1

. Normal matematiksel kural kullanabilir ve sol alt köşede (0,0) koymak tercih ediyorum ancak, bunu kullanabilirsiniz olsaydı:

LinkedList<String> printList = new LinkedList<String>(); 
for (char[] row: array) { 
    printList.addFirst(Arrays.toString(row));; 
} 
while (!printList.isEmpty()) 
    System.out.println(printList.removeFirst()); 

Bu, en ters sırayla (Son Giren İlk Çıkar) LIFO kullanılan baskı süresi.

6

Genel olarak foreach'u seçtiğimde, endeksleriyle aritmetik işlemler yapmaya gerek duymuyorum.

for (int[] x : array) 
{ 
    for (int y : x) 
    { 
     System.out.print(y + " "); 
    } 
    System.out.println(); 
} 
3

iyi sanırım That: Aşağıdaki

for (int[] row : matrix){ 
    System.out.println(Arrays.toString(row)); 
    } 
1
|1 2 3| 
|4 5 6| 

Kullanılacak kod değerleri yazdırmak için. Bu gibi görünecektir

System.out.println(Arrays.deepToString()); 

Çıktı (bir çizgide bütün matris):

[[1,2,3],[4,5,6]] 
5

Basit ve temiz yolu 2B dizi yazdırmak için.

System.out.println(Arrays.deepToString(array).replace("], ", "]\n").replace("[[", "[").replace("]]", "]"));