1

我正在尝试使用 printf() 语句对输出进行网格化。

字符串是通过使用两个 for 循环迭代的二维数组生成的

例子:

    String[][] arr =
    {
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"}
    }

    for(int i = 0; i < arr.length; i++)
    {
       for(int j = 0; j < arr[0].length; j++)
       {
          System.out.printf("%s", arr[i][j]);
       }
    }

我基本上想要代码中出现的输出(作为 5x5 网格),但是关于格式化的教程不是很容易理解,而且大多数不处理这种格式。

理想情况下,输出应如下所示:

    * 2 1 * 1
    * 2 1 * 1
    * 2 1 * 1
    * 2 1 * 1
    * 2 1 * 1

我的问题是,除了我将如何使用 printf() 字符执行此操作之外,在嵌套的 for 循环中使用这些字符是否会遇到任何问题?此外,我了解 %s 的来源,但任何进一步的符号使用都超出了我的范围。有人可以解释为什么他们会使用他们为此使用的符号和字符吗?

非常感谢。

4

4 回答 4

2

您需要在结束System.out.println();后添加一个inner loop以在换行符中打印下一行:-

for(int i = 0; i < arr.length; i++)
{
   for(int j = 0; j < arr[0].length; j++)
   {
      System.out.printf("%s ", arr[i][j]);
   }
   System.out.println();
}

有关各种的更多详细信息,format specifier请参阅此链接:-

于 2012-11-05T17:57:55.873 回答
0

Java 中 printf() 类型的参考:http: //docs.oracle.com/javase/7/docs/api/java/util/Formatter.html

代码:

    for(int i = 0; i < arr.length; i++) {
       for(int j = 0; j < arr[0].length; j++) {
        //System.out.printf("%s", arr[i][j]);
          System.out.printf("%s ", arr[i][j]);
        //The added space will pad the end after each character
       }
       System.out.println();
       //After each pass printing all the characters of your array,
       //this will add a line return.
    }
于 2012-11-05T18:01:20.463 回答
0
String[][] arr =
    {
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"},
      {"*", "2", "1", "*", "1"}
    }

for(int i=0 ; i<arr.length ; i++){

      for(int j=0 ; j<arr.length[i] ; j++){

         System.out.printf("%s ", arr[i][j]);

   }

     System.out.prinln();

}
于 2012-11-05T18:01:40.713 回答
0

现在 Java 8 已经发布,您可以使用以下内容:

System.out.printf("%s", Grid.print(width, height, this::showCell));

您需要将其添加为单独的格式化程序函数:

public String showCell(Integer x, Integer y) {
    return arr[x][y];
}
于 2017-07-16T21:49:38.437 回答