0

Pascal Triangle を 100 行に出力しようとしていますが、Java の int は負の値を返すようです。BigInteger を使用しようとしていますが、2 つの数値を加算するたびに 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!

私が見る限り、 dereferences は初期化されていませんp[i-1][j-1]p[0][0]

于 2012-04-26T11:01:37.287 に答える
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 に答える
0

これらの行は関係しています:

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

初期化しています[0][1]が、そうではなく、インデックスnot[0][0]でループを開始しています(配列のインデックスは 0 です)。10

[0][0]何を配置し、それに応じて配列ループをどのように開始するかを検討してください。

于 2012-04-26T11:02:48.183 に答える