我正在尝试像网格一样打印Sudoku。欲望输出将是:
int [][] easyGrid = {{2, 3, 5, 9, 7, 1, 8, 4, 6},
{4, 7, 1, 2, 8, 6, 9, 3, 5},
{8, 9, 6, 4, 3, 5, 2, 7, 1},
{1, 6, 8, 7, 4, 9, 5, 2, 3},
{7, 4, 9, 5, 2, 3, 1, 6, 8},
{3, 5, 2, 1, 6, 8, 4, 9, 7},
{6, 2, 4, 8, 1, 7, 3, 5, 9},
{9, 1, 3, 6, 5, 2, 7, 8, 4},
{5, 8, 7, 3, 9, 4, 6, 1, 2}}
;
但是System.out.println(Arrays.deepToString(easyGrid));
我得到了类似
[[2, 3, 5, 9, 7, 1, 8, 4, 6], [4, 7, 1, 2, 8, 6, 9, 3, 5], [8, 9, 6, 4, 3, 5, 2, 7, 1], [1, 6, 8, 7, 4, 9, 5, 2, 3], [7, 4, 9, 5, 2, 3, 1, 6, 8], [3, 5, 2, 1, 6, 8, 4, 9, 7], [6, 2, 4, 8, 1, 7, 3, 5, 9], [9, 1, 3, 6, 5, 2, 7, 8, 4], [5, 8, 7, 3, 9, 4, 6, 1, 2]]
答案 0 :(得分:5)
一种方法可能是使用StringJoiner
(Java 8+)和String.format
的组合,例如
import java.util.StringJoiner;
public class Test {
public static void main(String[] args) {
int[][] easyGrid = {
{2, 3, 5, 9, 7, 1, 8, 4, 6},
{4, 7, 1, 2, 8, 6, 9, 3, 5},
{8, 9, 6, 4, 3, 5, 2, 7, 1},
{1, 6, 8, 7, 4, 9, 5, 2, 3},
{7, 4, 9, 5, 2, 3, 1, 6, 8},
{3, 5, 2, 1, 6, 8, 4, 9, 7},
{6, 2, 4, 8, 1, 7, 3, 5, 9},
{9, 1, 3, 6, 5, 2, 7, 8, 4},
{5, 8, 7, 3, 9, 4, 6, 1, 2}};
for (int[] row : easyGrid) {
StringJoiner sj = new StringJoiner(" | ");
for (int col : row) {
sj.add(String.format("%02d", col));
}
System.out.println(sj.toString());
}
}
}
哪些输出......
02 | 03 | 05 | 09 | 07 | 01 | 08 | 04 | 06
04 | 07 | 01 | 02 | 08 | 06 | 09 | 03 | 05
08 | 09 | 06 | 04 | 03 | 05 | 02 | 07 | 01
01 | 06 | 08 | 07 | 04 | 09 | 05 | 02 | 03
07 | 04 | 09 | 05 | 02 | 03 | 01 | 06 | 08
03 | 05 | 02 | 01 | 06 | 08 | 04 | 09 | 07
06 | 02 | 04 | 08 | 01 | 07 | 03 | 05 | 09
09 | 01 | 03 | 06 | 05 | 02 | 07 | 08 | 04
05 | 08 | 07 | 03 | 09 | 04 | 06 | 01 | 02
您可以使用这些生成一些非常复杂的结果。有关详细信息,请查看formatted strings
例如......
import java.util.StringJoiner;
public class Test {
public static void main(String[] args) {
int[][] easyGrid = {
{2, 3, 5, 9, 7, 1, 8, 4, 6},
{4, 7, 1, 2, 8, 6, 9, 3, 5},
{8, 9, 6, 4, 3, 5, 2, 7, 1},
{1, 6, 8, 7, 4, 9, 5, 2, 3},
{7, 4, 9, 5, 2, 3, 1, 6, 8},
{3, 5, 2, 1, 6, 8, 4, 9, 7},
{6, 2, 4, 8, 1, 7, 3, 5, 9},
{9, 1, 3, 6, 5, 2, 7, 8, 4},
{5, 8, 7, 3, 9, 4, 6, 1, 2}};
String lineSplit = "";
StringJoiner splitJoiner = new StringJoiner("+", "|", "|");
for (int index = 0; index < easyGrid[0].length; index++) {
splitJoiner.add(String.format("%4s", "").replace(" ", "-"));
}
lineSplit = splitJoiner.toString();
for (int[] row : easyGrid) {
StringJoiner sj = new StringJoiner(" | ", "| ", " |");
for (int col : row) {
sj.add(String.format("%02d", col));
}
System.out.println(lineSplit);
System.out.println(sj.toString());
}
System.out.println(lineSplit);
}
}
哪个输出
|----+----+----+----+----+----+----+----+----|
| 02 | 03 | 05 | 09 | 07 | 01 | 08 | 04 | 06 |
|----+----+----+----+----+----+----+----+----|
| 04 | 07 | 01 | 02 | 08 | 06 | 09 | 03 | 05 |
|----+----+----+----+----+----+----+----+----|
| 08 | 09 | 06 | 04 | 03 | 05 | 02 | 07 | 01 |
|----+----+----+----+----+----+----+----+----|
| 01 | 06 | 08 | 07 | 04 | 09 | 05 | 02 | 03 |
|----+----+----+----+----+----+----+----+----|
| 07 | 04 | 09 | 05 | 02 | 03 | 01 | 06 | 08 |
|----+----+----+----+----+----+----+----+----|
| 03 | 05 | 02 | 01 | 06 | 08 | 04 | 09 | 07 |
|----+----+----+----+----+----+----+----+----|
| 06 | 02 | 04 | 08 | 01 | 07 | 03 | 05 | 09 |
|----+----+----+----+----+----+----+----+----|
| 09 | 01 | 03 | 06 | 05 | 02 | 07 | 08 | 04 |
|----+----+----+----+----+----+----+----+----|
| 05 | 08 | 07 | 03 | 09 | 04 | 06 | 01 | 02 |
|----+----+----+----+----+----+----+----+----|
答案 1 :(得分:1)
因为在http://www.tutorialspoint.com/java/util/arrays_deeptostring.htm中说:
java.util.Arrays.deepToString(Object [])方法返回一个字符串 表达深层内容&#34;指定的数组。如果 array包含其他数组作为元素,字符串表示 包含其内容等。此方法专为 将多维数组转换为字符串。字符串 表示由数组元素的列表组成,包含在中 方括号(&#34; []&#34;)。相邻的元素由 字符&#34;,&#34; (逗号后跟空格)。
解决方案是您必须在2d数组中剪切数组,然后连续剪切此数组中的每个数字。之后,打印您剪切的每个数组中的所有数字。这正是您所需要的:
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int [][] easyGrid = {{2, 3, 5, 9, 7, 1, 8, 4, 6},
{4, 7, 1, 2, 8, 6, 9, 3, 5},
{8, 9, 6, 4, 3, 5, 2, 7, 1},
{1, 6, 8, 7, 4, 9, 5, 2, 3},
{7, 4, 9, 5, 2, 3, 1, 6, 8},
{3, 5, 2, 1, 6, 8, 4, 9, 7},
{6, 2, 4, 8, 1, 7, 3, 5, 9},
{9, 1, 3, 6, 5, 2, 7, 8, 4},
{5, 8, 7, 3, 9, 4, 6, 1, 2}};
for(int[] arr : easyGrid) {
for(int number: arr) {
System.out.print(number + " ");
}
System.out.println();
}
}
}
结果将是:
答案 2 :(得分:1)
您有正确的想法使用Arrays
类中的一种打印方法。但是,对于Arrays.deepToString()
,您最终得到的是单行输出,这不是您想要的。相反,您可以迭代二维数组的行并在每一行上使用Arrays.toString()
:
for (int i=0; i < easyGrid[0].length; ++i) {
System.out.println(Arrays.toString(easyGrid[i]));
}
<强>输出:强>
[2, 3, 5, 9, 7, 1, 8, 4, 6]
[4, 7, 1, 2, 8, 6, 9, 3, 5]
[8, 9, 6, 4, 3, 5, 2, 7, 1]
[1, 6, 8, 7, 4, 9, 5, 2, 3]
[7, 4, 9, 5, 2, 3, 1, 6, 8]
[3, 5, 2, 1, 6, 8, 4, 9, 7]
[6, 2, 4, 8, 1, 7, 3, 5, 9]
[9, 1, 3, 6, 5, 2, 7, 8, 4]
[5, 8, 7, 3, 9, 4, 6, 1, 2]