所以我需要打印一个像桌子一样的2D数组,我的数字是正确的,我只是无法掌握打印边框的概念。
这就是我所拥有的
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
我希望这样,包括每个框中的四个字符空格(因此它可以容纳1000s中的数字)并且数字对齐。
---------------------
| 0| 0| 0| 0|
---------------------
| 0| 0| 0| 0|
---------------------
| 0| 0| 0| 0|
---------------------
| 0| 0| 0| 0|
---------------------
我不需要任何角落边框(例如,a +),只需要垂直线条(|)和破折号( - )
这怎么可能?
我现在打印我的数组的代码是:
int [][] gameboard = new int[4][4];
for(int i = 0; i < gameboard.length; i++)
{
for(int j = 0; j < gameboard[i].length; j++)
{
System.out.print(gameboard[i][j]);
if(j < gameboard[i].length - 1) System.out.print(" ");
}
System.out.println();
}
答案 0 :(得分:1)
只需要一点点数学和字符串操作:
int rows=4;
int cols=4;
int [][] gameboard = new int[rows][cols];
int cellSize = 4;
int rowLength = cols * cellSize + cols + 1;
final char[] array = new char[rowLength];
Arrays.fill(array, '-');
String rowDivider = new String(array);
for(int i = 0; i < gameboard.length; i++)
{
System.out.println(rowDivider);
for(int j = 0; j < gameboard[i].length; j++)
{
System.out.printf("|%"+cellSize+"d",gameboard[i][j]);
if(j == (gameboard[i].length - 1)) System.out.println("|");
}
}
System.out.println(rowDivider);
处自行播放代码
答案 1 :(得分:1)
这不是一项简单的任务,实际上整数可能超过4位数。您可能首先要确定最长的长度并使用它来格式化宽度。
假设长度是4,那么你可以尝试一下这个:
public void print2DArray() {
int [][] gameboard = new int[6][5];
for(int i = 0; i < gameboard.length; i++)
{
printDashLine(gameboard[0].length);
for(int j = 0; j < gameboard[i].length; j++)
{
System.out.printf("|%4d", gameboard[i][j]);
}
System.out.println('|');
}
printDashLine(gameboard[0].length);
}
private void printDashLine(int length) {
for(int i = 0; i < length*4+(length+1); i++) {
System.out.print('-');
}
System.out.println();
}
要了解%4d
请查看format string syntax
答案 2 :(得分:0)
我想出了一个更简单的解决方案,但它似乎可以实现你的目标。
int[][] gameboard = new int[4][4];
for (int i = 0; i < gameboard.length; i++) {
System.out.println("-------------------------------");
for (int j = 0; j < gameboard[i].length; j++) {
System.out.printf("%6d", gameboard[i][j]);
if (j < gameboard[i].length - 1) {
System.out.print("| ");
}
}
System.out.println();
}