1

以下のコードの 19 行目でヌル ポインター例外が発生しますseq[index].value = lo;。シーケンスクラスには整数型の値フィールドがありますが、問題は seq インスタンスの配列へのアクセスだと思います。

public class ImprovedFibonacci {

class Sequence{
    int value = 0;
    boolean isEven = false;
}

public static void main(String[] args){

    final int MAX_LOOP = 20;
    int lo = 1;
    int hi = 1;
    int i = 0;
    String mark = "-";

    int index = 0;
    ImprovedFibonacci.Sequence[] seq = new ImprovedFibonacci.Sequence[MAX_LOOP];
    seq[index].value = lo;

    System.out.println("Fibonacci seq 1 : " + lo);
    System.out.println("Sequence class index: "+index+"value: "+seq[index].value);

    for(i=MAX_LOOP;i>=1;i--) {
        hi = hi + lo;
        lo = hi - lo;
        index++;
        if(hi % 2 == 0){
            mark = "-";
            seq[index].isEven = true;
        }else{
            mark = "";
        }

        System.out.println(i + " : " + hi + mark);
        seq[index].value = hi;
        System.out.println("Sequence class index: "+index+"value: "+seq[index].value+"IsEven: "+seq[index].isEven);
    }
}
}
4

2 に答える 2

3

配列を作成しますが、オブジェクトで埋めることはありません。

ImprovedFibonacci.Sequence[] seq = new ImprovedFibonacci.Sequence[MAX_LOOP];
    seq[index].value = lo;

したがって、seq [index]はnullを返し、null.valueはNullPointerExceptionを返します

例えば:

Object[] array = new Object[10];

10個の要素で配列を作成しますが、すべての要素がnullになります。

サンプルコードは次のとおりです:http: //ideone.com/0gIYm

于 2012-07-28T06:50:10.957 に答える
1

seqはMAX_LOOPスペースを持つ配列ですが、インスタンス化されたものはありません。最初の要素(seq[0])は、他のすべての要素と同様にnullです。

seq[index] = new ImprovedFibonacci.Sequence();
seq[index].value = lo;
于 2012-07-28T06:50:42.970 に答える