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 个元素的数组,但每个元素都将为空。

这是示例代码:http: //ideone.com/0gIYm

于 2012-07-28T06:50:10.957 回答
1

seq是一个具有 MAX_LOOP 空间的数组,但其中没有实例化任何内容。第一个元素 ( seq[0]) 为空,所有其他元素也是如此。

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