0

クラスのコンストラクターを呼び出すと、コメントに示されているエラーが表示されます(配列部分を削除すると、すべてうまくいきます)。これは、配列の宣言が間違っているためseqですか?

public class FibIt implements SeqIt{
    public int counter;
    public int ptr;
    public int [] seq;

    public FibIt(Fib x)
    {   counter=0;
        ptr=0;
        seq[0]=x.first1;         //gives me an error here saying Exception in 
                                     //thread "main" java.lang.NullPointerException
                                 //at FibIt.<init>(FibIt.java:9)
                                     //at Main.main(Main.java:6)
        seq[1]=x.first2;
        for (int i=2; seq[i-1]<=x.last; i++)
            {seq[i]=seq[i-1]+seq[i-2];}
    }
    @Override
    public int func2() {
        // TODO Auto-generated method stub
        ptr++;
        return seq[ptr-1];
    }

}
4

3 に答える 3

6

配列を初期化する必要があるので、public int[] seq = new int[10];

次に、10を必要なサイズに置き換えます。

そして、@ Jackが良い解決策を投稿したとき、私はちょうどあなたの質問に答えようとしていました。ArrayList<Integer>配列のサイズがわからない場合に非常に便利です。

于 2012-11-14T04:35:53.153 に答える
2

アレイを初期化する必要があります。1つは宣言であり、もう1つは初期化です。

int[] seqseqの配列であるnameの変数を宣言しますint。次に、配列のコンストラクターを割り当てることにより、効果的に初期化する必要があります。new int[dimension]

于 2012-11-14T04:37:34.070 に答える
1

はい、配列を宣言しただけで、初期化はしていません。

public int [] seq = new int[anySize];
于 2012-11-14T04:37:26.693 に答える