帕斯卡的三角形二维数组 - 格式化打印输出

ant*_*ony 7 java arrays multidimensional-array pascals-triangle

我有一个小任务,我必须使用二维数组来生成帕斯卡三角形。这是我的代码,它有效。如果我像这样显示三角形,还有一个额外的信用机会:

帕斯卡三角形

但是,我的间距不是那样格式化的。它只是显示所有排列在左侧的数字。这很难描述,但如果你运行它,你就会明白我的意思。

这是我的代码:

public class Pascal {
    public static final int ROW = 16;
    public static void main(String[] args) {
        int[][] pascal = new int[ROW + 1][];
        pascal[1] = new int[1 + 2];
        pascal[1][1] = 1;
        for (int i = 2; i <= ROW; i++) {
            pascal[i] = new int[i + 2];
            for (int j = 1; j < pascal[i].length - 1; j++) {
                pascal[i][j] = pascal[i - 1][j - 1] + pascal[i - 1][j];
            }
        }
        for (int i = 1; i <= ROW; i++) {
            for (int j = 1; j < pascal[i].length - 1; j++) {
                System.out.print(pascal[i][j] + " ");
            }
            System.out.println();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

如果有人能帮我弄清楚如何向我的程序添加正确的间距以产生图片中所需的输出,那就太好了。我知道我需要在System.out.print(" ")某个地方放一个。我只是不知道在哪里。

nIc*_*cOw 7

在这里,我修改了您的代码,由于控制台窗口的限制,它的 ROW 大小打印得非常好:

import java.util.*;

public class Pascal {
    public static final int ROW = 12;
    private static int max = 0;

    public static void main(String[] args) {
        int[][] pascal = new int[ROW + 1][];
        pascal[1] = new int[1 + 2];
        pascal[1][1] = 1;
        for (int i = 2; i <= ROW; i++) {
            pascal[i] = new int[i + 2];
            for (int j = 1; j < pascal[i].length - 1; j++) {
                pascal[i][j] = pascal[i - 1][j - 1] + pascal[i - 1][j];
                String str = Integer.toString(pascal[i][j]);
                int len = str.length();
                if (len > max)
                    max = len;
            }
        }

        for (int i = 1; i <= ROW; i++) {
            for (int k = ROW; k > i; k--)
                System.out.format("%-" + max + "s", " ");
            for (int j = 1; j < pascal[i].length - 1; j++)
                System.out.format("%-" + (max + max) + "s", pascal[i][j]);
            System.out.println();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

                                 1     
                              1     1     
                           1     2     1     
                        1     3     3     1     
                     1     4     6     4     1     
                  1     5     10    10    5     1     
               1     6     15    20    15    6     1     
            1     7     21    35    35    21    7     1     
         1     8     28    56    70    56    28    8     1     
      1     9     36    84    126   126   84    36    9     1     
   1     10    45    120   210   252   210   120   45    10    1     
1     11    55    165   330   462   462   330   165   55    11    1     
Run Code Online (Sandbox Code Playgroud)


col*_*son 5

您遇到了间距问题,因为您需要向某些数字添加空格以容纳较大数字占用的空间。首先确定您计划打印的最大数字是多少(以编程方式)。然后确定该数字 log(n) 中的位数。然后,您可以使用此数字为位数少于最大数字的数字打印空格,以使打印效果更好。