错误的多项式阵列初始化试图构建Pascal三角形(Java)



我正在尝试编写一个使用多维数组创建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-loops值x为1时,值y为0,如果(y == 0 || y ===)为0。pascal [x] .length-1)应应用于设置pascal [1] [0] = 1。

感谢您的帮助!

在构造函数中,在else初始化2D数组时,您的分配不正确。您想初始化当前元素,但左侧不正确(并且与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 

相关内容

  • 没有找到相关文章