Java-像表格一样打印2D数组-带有边框



所以我需要像表格一样打印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();
    }

最新更新