2011-10-16 40 views
16

Tôi có một mảng hai chiều [20] [20] mà tôi đã thao tác. Trong một vài từ tôi đang làm một dự án rùa với người dùng nhập hướng dẫn như bút lên = 0 và bút xuống = 1. Khi bút xuống vị trí mảng riêng lẻ, ví dụ [3] [4] được đánh dấu bằng "1" .Java - in mảng hai chiều

Bước cuối cùng của chương trình của tôi là in mảng 20/20.

tôi không thể tìm ra cách để in nó và tôi cần phải thay thế "1" với một chữ "X"

Lệnh in thực sự là một phương pháp bên trong một lớp học mà một chương trình cha mẹ sẽ gọi .. Tôi biết tôi phải sử dụng một vòng lặp ... bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.

public void printGrid() 
     { 
      System.out.println... 
     } 

Trả lời

24
public void printGrid() 
{ 
    for(int i = 0; i < 20; i++) 
    { 
     for(int j = 0; j < 20; j++) 
     { 
     System.out.printf("%5d ", a[i][j]); 
     } 
     System.out.println(); 
    } 
} 

Và để thay thế

public void replaceGrid() 
{ 
    for (int i = 0; i < 20; i++) 
    { 
     for (int j = 0; j < 20; j++) 
     { 
     if (a[i][j] == 1) 
      a[i][j] = x; 
     } 
    } 
} 

Và bạn có thể làm điều này tất cả trong một bước:

public void printAndReplaceGrid() 
{ 
    for(int i = 0; i < 20; i++) 
    { 
     for(int j = 0; j < 20; j++) 
     { 
     if (a[i][j] == 1) 
      a[i][j] = x; 
     System.out.printf("%5d ", a[i][j]); 
     } 
     System.out.println(); 
    } 
} 
+0

Tôi có thể thay thế bên trong phương thức printGrid không? – user997462

+0

chắc chắn! thêm 'if' bên trong' – COD3BOY

+0

xem cập nhật ...... – COD3BOY

1

Bạn loop bởi hàng và sau đó cột với một cấu trúc giống như

for ...row index... 
    for ...column index... 
    print 

nhưng tôi nên đoán đây là bài tập về nhà vì vậy chỉ cần thử nó ra cho mình.

Hoán đổi chỉ mục hàng/cột trong các vòng tùy thuộc vào việc bạn cần phải đi qua đầu tiên và sau đó xuống, so với xuống đầu tiên và sau đó qua.

+0

làm cách nào để thay thế 1 bằng dấu x? BTW, không phải bài tập về nhà ... Tôi là một chuyên gia CNTT 40 năm (mạng) luôn bị hấp dẫn bởi lập trình nên học cái gì đó mới mẻ. – user997462

+0

Chỉ cần kiểm tra ký tự khi đang di chuyển (bên trong vòng lặp) và thay thế nếu đó là '1' – Jack

+0

@Jack - một cái gì đó như 'in (a [i] [j] == 1? 'X': ''); ' –

18

Something như thế này mà tôi trả lời bằng một câu hỏi khác

public class Snippet { 
    public static void main(String[] args) { 
     int [][]lst = new int[10][10]; 

     for (int[] arr : lst) { 
      System.out.println(Arrays.toString(arr)); 
     } 
    } 

} 
1

Vâng, vì 'X' là một char và không phải là int, bạn không thể hành động ually thay thế nó trong ma trận chính nó, tuy nhiên, đoạn mã sau nên in một 'x' char bất cứ khi nào nó đi qua một 1.

public void printGrid(int[][] in){ 
    for(int i = 0; i < 20; i++){ 
     for(int j = 0; j < 20; j++){ 
      if(in[i][j] == 1) 
       System.out.print('X' + "\t"); 
      else 
       System.out.print(in[i][j] + "\t"); 
     } 
     System.out.print("\n"); 
    } 
} 
+0

Làm thế nào để định dạng này để in lưới 20 20? – user997462

+0

Điều này sẽ in tốt. Bạn có thể thêm một ký tự tab ("\ t", hoặc bất kỳ ký tự nào, tùy chọn của bạn) ở cuối mỗi câu lệnh in để tách riêng từng phần tử. – Wyatt915

27

bạn có thể sử dụng mettod Utility. Arrays.deeptoString();

public static void main(String[] args) { 
    int twoD[][] = new int[4][]; 
    twoD[0] = new int[1]; 
    twoD[1] = new int[2]; 
    twoD[2] = new int[3]; 
    twoD[3] = new int[4]; 

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

} 
+1

'Mảng.deepToString' làm in mảng 2D nhưng trên một dòng duy nhất, hữu ích vì nó có thể được, nó không phải là những gì câu hỏi là về (lưới). –

0

Nếu bạn biết maxValue (có thể dễ dàng thực hiện nếu một lần lặp lại các phần tử không phải là vấn đề) của ma trận, tôi tìm mã sau hiệu quả hơn và chung chung hơn.

int numDigits = (int) Math.log10(maxValue) + 1; 
    if (numDigits <= 1) { 
     numDigits = 2; 
    } 
    StringBuffer buf = new StringBuffer(); 
    for (int i = 0; i < matrix.length; i++) { 
     int[] row = matrix[i]; 
     for (int j = 0; j < row.length; j++) { 
      int block = row[j]; 
      buf.append(String.format("%" + numDigits + "d", block)); 
      if (j >= row.length - 1) { 
       buf.append("\n"); 
      } 
     } 
    } 
    return buf.toString(); 
1

Bạn thử cách này?

public static void main (String [] args) 
{ 
    int [] [] listTwo = new int [5][5]; 
    // 2 Dimensional array 
    int x = 0; 
    int y = 0; 
    while (x < 5) { 
     listTwo[x][y] = (int)(Math.random()*10); 

     while (y <5){ 
      listTwo [x] [y] = (int)(Math.random()*10); 
      System.out.print(listTwo[x][y]+" | "); 
      y++;     
     } 
     System.out.println(""); 
     y=0; 
     x++; 
    } 
}