提问者:小点点

Java中的Pascal三角形


这里是Java初学者! 作为编程练习的一部分,我遇到了帕斯卡三角。 我试图实现一个解决方案,其中三角形的打印方式如下:

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]);
        }
    }
}

共1个答案

匿名用户

你在正确的轨道上。 下面是我如何实现它的:

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等于j时将其设置为1。 由于这个错误,在后面的行中,i不是0,而j是,您试图访问数组[i-1][j-1],这基本上是数组[i-1][-1],从而导致IndexOutOfBoundsException

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

另外,这不是一个错误,但是如果(i!=0&&i==j)i!=0部分是不必要的,因为您以前检查了i==0

链接到回复。