有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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|
---------------------

我不需要任何角边框(例如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) 个答案

  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. # 2 楼答案

    我想出了一个简单得多的解决方案,但似乎能实现你的目标

    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();
        }
    
  3. # 3 楼答案

    只是一点数学和字符串操作:

    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自己玩代码