访问内部类字段时的java.lang.NullPointerException

时间:2012-07-28 06:45:51

标签: java nullpointerexception

我从第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);
    }
}
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

seq是一个具有MAX_LOOP空间的数组,但没有在其中实例化。第一个元素(seq[0])为空,与所有其他元素一样。

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