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
.
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
.