2011-10-16 203 views
16

我有一个[20] [20]我已经操作的二维数组。简单地说,我正在做一个用户输入指令的海龟项目,例如pen up = 0和pen down = 1.当笔落在单独的阵列位置时,例如[3] [4]被标记为“1” 。Java - 打印二维数组

我的程序的最后一步是打印出20/20阵列。

我无法弄清楚如何打印它,我需要用一个“X”

打印命令实际上是一个类,父程序将调用里面的方法来代替“1” .. 。我知道我必须使用循环...任何帮助,将不胜感激。

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

回答

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

而更换

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

你可以做到这一切一气呵成:

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

吗? – user997462

+0

当然!在' – COD3BOY

+0

里面加'if'参见更新...... – COD3BOY

1

你应该通过环行,然后列一个结构类似

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

,但我想这是功课所以只是尝试一下自己。

在for循环中交换行/列索引,具体取决于是否需要先遍历然后再遍历,然后再遍历。

+0

我该如何用x替换1?顺便说一句,不要做作业...我是一个40岁的IT专业人员(网络),他总是对编程感兴趣,因此学习了一些新东西。 – user997462

+0

只要检查旅途中的字符(在循环中),并将它替换为'1' – Jack

+0

@Jack - 像'print(a [i] [j] == 1?'X':'');我可以在printGrid方法中替换内部的' –

18

事情是这样的,我在另一个问题

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

回答那么,因为'X'是一个char而不是int,所以你不能采取行动在矩阵本身ually取代它,但是,下面的代码应该打印一个“X”字符时,它遇到一个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

如何格式化这个以打印一个20乘20的网格? – user997462

+0

这应该打印得很好。您可以在每个打印语句的末尾添加制表符(“\ t”或任何字符,您的首选项)以分隔每个元素。 – Wyatt915

27

可以使用工具mettod。 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

'数组。deepToString'只打印二维数组,但只在一行上,尽可能有用,它不是问题所在(网格)。 –

0

如果你知道MAXVALUE来矩阵的,我发现下面的代码更有效和通用的(可以很容易地,如果元素的另一次迭代是不是一个问题做)。

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

试试这个怎么样?

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++; 
    } 
}