Вы были на правильном пути. Вот как я это реализовал:
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