Java – 打印二维数组

我有一个[20] [20]二维数组,我操纵过。 简而言之,我正在做一个乌龟项目,用户输入指令,如笔向上= 0和笔向下= 1.当笔向下时,单个arrays位置,例如[3] [4]标记为“1” 。

我的程序的最后一步是打印出20/20数组。

我无法弄清楚如何打印它,我需要用“X”替换“1”

print命令实际上是父类程序将调用的类中的一个方法…我知道我必须使用循环…任何帮助将不胜感激。

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

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

你可以使用Utility 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)); } 

我在另一个问题中回答这样的事情

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

您应该按行循环,然后使用类似结构的列循环

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

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

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

好吧,既然’X’是一个char而不是一个int,你实际上不能在矩阵本身中替换它,但是,下面的代码应该在遇到1时打印一个’x’char。

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

试试这个怎么样?

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

如果您知道矩阵的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();