将2D阵列打印为网格? (JAVA)

时间:2016-02-12 04:33:03

标签: java arrays

我在一个我一直在努力的个人Java项目中遇到了一些难题。我想以表格的形式打印一个二维字符串数组。不是字符串本身,而是行和列标签(想想Microsoft Excel)。这就是我设想的最终产品,星号表示字符串的位置。

{{1}}

我知道这将使用嵌套的正向循环,并且逻辑过程将把String值放在内部循环中,例如"例如[i] [j]"类型格式。我对如何以正确的格式围绕单元格进行设计感到困惑,将每个字符串限制为10个字符,就像Excel在缩小时限制其单元格大小一样。我是否使用子串?我是否使用printf来正确分隔第10行?

任何指针都非常感激,我以前从来没有像这样被困。

2 个答案:

答案 0 :(得分:1)

第一行应该很容易,假设您不超过26列,即列名称仅为AZ

偶数行都是----+的导入,然后是---------+的columnCount重复。

奇数行(除了第一个)是999 |的导入,其中999是行号,右对齐,带有前导空格。这可以使用printf()String.format()来完成,格式字符串为
"%3d |"

导入后的是columnCount重复的字符串值,修剪和居中对齐到9个字符,然后是|

要居中对齐9个字符,请执行以下操作:

  • 如果长度> 9,修剪为9(是的,使用substring())。
  • 否则,计算所需的空格,即spacesTotal = 9 - trimmedLength 计算左侧的空格:spaceBefore = spacesTotal / 2
    计算右边的空格:spaceAfter = spacesTotal - spaceBefore
    通过这样做,奇数个空格(例如5)变为2之前和之后3 现在打印spaceBefore空格,(裁剪)文本值,然后打印spaceAfter空格和|

答案 1 :(得分:1)

public static void printStringGrid(String[][] array){
    System.out.print("    |");
    for (int i = 0; i < array[0].length; i++){
        System.out.print("    ");
        System.out.print((char)('A' + i));
        System.out.print("    |");
    }
    System.out.println();
    for (int i = 0; i < array.length; i++){
        System.out.print("----+");
        for (int j = 0; j < array[0].length; j++){
            System.out.print("---------+");
        }
        System.out.println();
        System.out.print("  " + (i + 1) + " |");
        for (int j = 0; j < array[0].length; j++){
            if (array[i][j].length() < 10){
                int spaces = (9 - array[i][j].length()) / 2;
                for (int k = 0; k < spaces; k++){
                    System.out.print(" ");
                }
                System.out.print(array[i][j]);
                for (int k = 0; k < (9 - array[i][j].length()) - spaces; k++){
                    System.out.print(" ");
                }
            }
            else{
                System.out.print(array[i][j].substring(0, 9));
            }
            System.out.print("|");
        }
        System.out.println();
    }
}