Java - 像桌子一样打印2D数组 - 带边框

时间:2014-10-23 20:44:20

标签: java arrays 2d

所以我需要打印一个像桌子一样的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();
    }

3 个答案:

答案 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);

http://ideone.com/PnfqS0

处自行播放代码

答案 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();
    }