这里是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]);
}
}
}
你在正确的轨道上。 下面是我如何实现它的:
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
。
链接到回复。