二维数组bug(找不到)

时间:2014-04-08 02:56:22

标签: java arrays

我正在做这个产生帕斯卡三角形的作业项目,但是我收到了一个错误,我找不到它。我看了很多次,但对我来说似乎没关系,有人可以帮我找到这个错误吗?

public class PascalsTriangle {
    public static void main(String[] args) {
    int[][] triangle = new int[11][];
    fillIn(triangle);
    print(triangle);
}

public static void fillIn(int[][] triangle) {
    for (int i = 0; i < triangle.size(); i++) {
        triangle[i] = new int[i++];
        triangle[i][0] = 1;
        triangle[i][i] = 1;
        for (int j = 1; j < i; j++) {
            triangle[i][j] = triangle[i-1][j-1] + triangle[i-1][j];
        }
    }
}

public static void print(int[][] triangle) {
    for (int i = 0; i < triangle.length; i++) {
        for (int j = 0; j < triangle[i].length; j++) {
            System.out.print(triangle[i][j] + " ");
        }
        System.out.println();
    }
}

2 个答案:

答案 0 :(得分:4)

我认为您已将代码更改为使用length而不是size,因为其他答案会提及。

调用此方法时:

public static void fillIn(int[][] triangle) {
    for (int i = 0; i < triangle.length; i++) {
        triangle[i] = new int[i++];                 // this line
        triangle[i][0] = 1;

上面指出的那一行应该是:

triangle[i] = new int[i + 1];

当您致电i++时,int数组将初始化为i然后,我将会增加。您已经在for循环的声明中递增i。所以,我们带走了++

但是我们还有另一个问题。你在i = 0开始循环。然后初始化长度为0的数组。然后向该数组添加一个元素。有些事情没有意义。你打算做的是将数组初始化为int[i + 1]

最后,程序会显示Pascal三角形中的一些行:

 1 
 1 1 
 1 2 1 
 1 3 3 1 
 1 4 6 4 1 
 1 5 10 10 5 1 
 1 6 15 20 15 6 1 
 1 7 21 35 35 21 7 1 
 1 8 28 56 70 56 28 8 1 
 1 9 36 84 126 126 84 36 9 1 
 1 10 45 120 210 252 210 120 45 10 1 

答案 1 :(得分:1)

不确定此方法是否存在

  

triangle.size()

  

triangle.length

代替