Треугольник Pascal в Java - PullRequest
       1

Треугольник Pascal в Java

2 голосов
/ 16 июня 2020

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

1 Ответ

1 голос
/ 16 июня 2020

Вы были на правильном пути. Вот как я это реализовал:

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 до этого. Вместо установки текущего элемента в 1, когда i было 0 или когда i равнялось j, вы должны были сделать это, когда j было 0 или когда i равнялось j. Из-за этой ошибки в более поздних строках, где i не было 0, а было j, вы пытались получить доступ к array[i - 1][j - 1], который в основном был array[i - 1][-1], вызывая IndexOutOfBoundsException.

Я также сделал зубчатый массив вместо четной матрицы, потому что это имеет больше смысла, но это не должно иметь большого значения.

Кроме того, это не было ошибкой, но вы сделали else if (i!=0 && i==j) Часть i != 0 не нужна потому что вы проверили ранее, если i == 0.

Ссылка на repl.it

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...