我正在尝试编写一个使用多维数组创建pascal三角形对象的类。现在我确实已经有了一切(至少我是这么认为),除了正确的数组初始化。我的程序如下:
class Pascal{
//Object variables
int size;
int[][] pascal;
Pascal(int size){ //Constructor
this.size = size; //Defines how many rows/columns the triangle has.
pascal = new int[size][];
//Allocation of the arrays
for(int i=0;i<pascal.length;i++)
pascal[i] = new int[i+1];
pascal[0][0] = 1; //the tip of the triangle is always one. Also you need a value to start with.
//Initialisation of the elements
for(int x=0;x<pascal.length;x++){
for(int y=0;y<pascal[x].length;y++){
if(x>0){
if(y==0 || y == (pascal[x].length)-1)
pascal[x][y] = 1; //Initialisation of the first and last element of the actual array x
else
pascal[x-1][y-1] = pascal[x-1][y] + pascal[x-1][y-1];//Initialisation of all elements in between
}
}
}
}
//The print method needed to display the pascal triangle
void print(){
for(int i=0;i<pascal.length;i++){
for(int k=pascal.length;k>i;k--)
System.out.print(" ");
for(int j=0;j<pascal[i].length;j++)
System.out.print(pascal[i][j]+" ");
System.out.println();
}
}
//main function
public static void main(String... args){
Pascal p = new Pascal(5); //example triangle consisting of 5 rows total
p.print();
}
}
此特定示例中的输出(新Pascal(5);)应为:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1
然而它是:
1
2 1
1 1 1
1 0 1 1
1 0 0 0 1
我知道问题必须在代码的数组初始化部分的某处,这可能是一个简单的错误,但是在显示器上主演并不能让我在任何地方:/
万一你不想给我答案: 根据我的理解,数组元素pascal [1] [0]应该是1而不是2,因为当for循环值x为1且值y为0时,if-condition if(y == 0 || y == pascal [x] .length-1)应该适用,因此设置pascal [1] [0] = 1。
感谢您的帮助!
答案 0 :(得分:1)
在构造函数中,初始化2D数组时,在else
中,您的分配不正确。您想初始化当前元素,但左侧不正确(与if
不一致):
pascal[x-1][y-1] = pascal[x-1][y] + pascal[x-1][y-1];
尝试[x][y]
元素本身。
pascal[x][y] = pascal[x-1][y] + pascal[x-1][y-1];
只进行此更改,我得到了正确的输出:
1
1 1
1 2 1
1 3 3 1
1 4 6 4 1