2012-04-26 160 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); 
} 
相關問題