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