2012-04-26 117 views
0

我正在尝试将Pascal三角形打印成一百行,但Java的int似乎返回负值。我正在尝试使用BigInteger,但每次添加两个数字时都会得到NullPointerException!我想我已经初始化了它们。这里是我的代码:为什么我的BigInteger.add()会得到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(); 
     } 
    } 
    } 

回答

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]解引用p[0][0],其中据我可以看到尚未初始化。

0

这些线路涉及:

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

您初始化[0][1]但不[0][0]和你在指数10(阵列0索引)开始你的循环。

考虑应该进入位置[0][0]以及数组循环如何相应地启动。

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); 
} 
相关问题