Java 中的帕斯卡三角形

Pascal's triangle in Java

Java初学者来了!作为练习编程的一部分,我 运行 进入了 Pascal 的三角形。我试图实现一个三角形打印的解决方案:

1
1 1 
1 2 1
1 3 3 1 
1 4 6 4 1
...

所以大致偏右。虽然我的解决方案 运行 出现了多个错误,但我很希望能得到帮助,但我主要想知道我对我的解决方案的思考是否正确。 (对于某些功能,我使用的是自定义库)

public static void main(String[] args) {
    int input = readInt("Enter triangle size, n = ");
    array = new int[input][input];

    for (int i = 0; i < input; i++) { // rows
        for (int j = 0; j < i + 1; j++) { // columns
            if (i = 0) {
                array[i][0] = 1;
            } else if (i != 0 && i == j) {
                array[i][j] = 1;
            } else {
                array[i][j] = array[i - 1][j] + array[i - 1][j - 1];
            }
        }
    }
    // print out only the lower triangle of the matrix
    for (int i = 0; i < input; i++) {
        for (int j = 0; j < input; j++) {
            if (i <= j) {
                System.out.println("%d ", array[i][j]);
            }
        }
    }
}

你走在正确的轨道上。以下是我的实现方式:

Scanner sc = new Scanner(System.in);
System.out.print("Enter triangle size, n = ");
int n = sc.nextInt();
sc.close();
//This will be a jagged array
int[][] array = new int[n][0];

for (int i = 0; i < n; i++) {
  //Add the next level (it's empty at the start)
  array[i] = new int[i + 1];
  for (int j = 0; j <= i; j++) {
    //At the ends, it's just 1
    if (j == 0 || j == i) {
      array[i][j] = 1;
    } else { //The middle
      array[i][j] = array[i - 1][j - 1] + array[i - 1][j];
    }
  }
}

for (int i = 0; i < n; i ++) {
  for (int j = 0; j <= i; j++) {
    //printf is what you use to do formatting
    System.out.printf("%d ", array[i][j]);
  }
  //Without this, everything's on the same line
  System.out.println();
}

你的 else 部分是正确的,但你之前没有检查 j 是否等于 0。不要在 i 为 0 或 i 等于 j 时将当前元素设置为 1,而应在 j 为 0 或 i 时将其设置为 1等于 j。由于这个错误,在后面 i 不是 0 而 j 是的行中,您尝试访问 array[i - 1][j - 1],这基本上是 array[i - 1][-1],导致 IndexOutOfBoundsException.

我还制作了一个锯齿状数组而不是偶数矩阵,因为这样更有意义,但应该没什么大不了的。

另外,这不是一个错误,但你做了 else if (i!=0 && i==j) i != 0 部分是不必要的,因为你之前检查过 i == 0.

Link to repl.it