0

我正在尝试将 Pascal Triangle 打印到一百行,但 Java 的 int 似乎返回负值。我正在尝试使用 BigInteger,但每当我添加两个数字时,我都会得到 NullPointerException!我想我初始化了它们。这是我的代码:

    import java.math.BigInteger;
    public class Pascal {
    public static void main(String[] args) { 
        BigInteger[][] p = new BigInteger[100][];

        p[0] = new BigInteger[3];
        p[0][1] = BigInteger.ONE;
        for (int i = 1; i <= N; i++) {
            p[i] = new BigInteger[i + 3];
            for(int j = 0; j < p[i].length; j++){
                p[i][j] = new BigInteger("0");
            }
            for (int j = 1; j < p[i].length - 1; j++)
                p[i][j] = p[i-1][j-1].add(p[i-1][j]); //NPE!

        }
        for (int i = 0; i <= N; i++) {
            for (int j = 1; j < p[i].length - 1; j++) {
                System.out.print(p[i][j] + " ");
            }
            System.out.println();
        }
    }
    }
4

3 回答 3

3

考虑第一次迭代:

        for (int j = 1; j < p[i].length - 1; j++)
            p[i][j] = p[i-1][j-1].add(p[i-1][j]); //NPE!

据我所知, p[i-1][j-1]dereferencesp[0][0]尚未初始化。

于 2012-04-26T11:01:37.287 回答
0

这些行涉及:

    p[0][1] = BigInteger.ONE;
    for (int i = 1; i <= N; i++) 

您正在初始化[0][1]但不是,[0][0]并且您在索引处开始循环(数组索引为 0)。10

考虑什么应该进入位置[0][0]以及数组循环应该如何相应地开始。

于 2012-04-26T11:02:48.183 回答
0

声明引用名称和类型是不够的;您必须为要指向的引用分配内存。

这是一个经典的数组。我看到很多人像这样声明一个数组,想知道为什么当他们尝试使用它时会得到 NullPointerException:

int numValues = 10;
Integer [] values = new Integer[numValues];  // All ten of these references initially point to null
// You have to point them to something
for (int i = 0; i < numValues; ++i) {
    values[i] = new Integer(i);
}
于 2012-04-26T11:38:57.473 回答