我正在尝试使用printf()语句对输出进行网格化。
字符串是通过2D数组生成的,该数组使用两个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的来源,但任何进一步的符号用法都超出了我的意思。有人可以解释为什么他们会使用他们正在使用的符号和字符吗?
非常感谢。
答案 0 :(得分: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
的详细信息,请参阅此链接: -
答案 1 :(得分: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.
}
答案 2 :(得分: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();
}
答案 3 :(得分:0)
现在Java 8已经发布,您可以使用以下内容:
System.out.printf("%s", Grid.print(width, height, this::showCell));
您需要将其添加为单独的格式化程序函数:
public String showCell(Integer x, Integer y) {
return arr[x][y];
}