所以我需要像表格一样打印2D数组,而且我有正确的数字,我就是无法理解打印表格边框的概念。
这是我的
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
我希望它是这样的,在每个框中包含四个字符的空格(这样它就可以容纳1000中的数字),并且数字向右对齐。
---------------------
| 0| 0| 0| 0|
---------------------
| 0| 0| 0| 0|
---------------------
| 0| 0| 0| 0|
---------------------
| 0| 0| 0| 0|
---------------------
我不需要任何角边界(例如,一个+),只需要垂直线(|)和短划线(-)
这怎么可能呢?
我现在打印数组的代码是:
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();
}
只需要一点数学和字符串操作:
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);
在上自己玩代码http://ideone.com/PnfqS0
这不是一个简单的任务,实际上整数可能长于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
,请查看格式字符串语法
我提出了一个简单得多的解决方案,但它似乎可以实现您的目标。
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();
}