Java 用HashTableMap计算第n个Fibonacci数
我试图实现计算第n个Fibonacci数的方法Fibcac2,但是我得到了空指针异常,我不知道如何进一步。我的解决方案有意义吗?任何帮助都将不胜感激 注意:HashTableMap也是我自己实现的,所以它不同于Java的实现 更新:代码最后一行的NullPointerException 代码如下:Java 用HashTableMap计算第n个Fibonacci数,java,Java,我试图实现计算第n个Fibonacci数的方法Fibcac2,但是我得到了空指针异常,我不知道如何进一步。我的解决方案有意义吗?任何帮助都将不胜感激 注意:HashTableMap也是我自己实现的,所以它不同于Java的实现 更新:代码最后一行的NullPointerException 代码如下: private static int callCount2; private static Map<Integer, Long> ansMap = new LLQHashTableMap(
private static int callCount2;
private static Map<Integer, Long> ansMap = new LLQHashTableMap(10);
public static long fibCalc2(int n) {
if(n == 0 ||n == 1) return n;
if(ansMap.getSize() <= 2){
ansMap.define(0, (long) 0);
ansMap.define(1, (long) 1);
}
long tempVal1, tempVal2;
try {
long temp = ansMap.remove(n);
ansMap.define(n, temp);
} catch (Exception ex){
try {
long temp = ansMap.remove(n-1);
ansMap.define(n, temp);
tempVal1 = ansMap.getValue(n-1);
} catch (Exception ex1){
tempVal1 = fibCalc2(n-1);
}
try {
long temp = ansMap.remove(n-2);
ansMap.define(n, temp);
tempVal2 = ansMap.getValue(n-2);
} catch (Exception ex1){
tempVal2 = fibCalc2(n-2);
}
ansMap.define(n, tempVal1+tempVal2);
}
callCount2++;
return ansMap.getValue(n);
}
private static int callCount2;
私有静态映射ansMap=新的LLQHashTableMap(10);
公共静态长光纤C2(int n){
如果(n==0 | | n==1)返回n;
如果(ansMap.getSize()NPE发生在
long temp = ansMap.remove(n);
当n=2时,因为移除(n)将返回null,并且您不能将null赋值给基元类型变量。请添加异常的StackTrace,好吗?它会告诉您错误发生在哪一行。@makuswnull指针异常在最后一个返回语句上为什么在catch块中有逻辑?您应该打印ex.printStackTrace()
在那里,不要调用其他方法。如果前一个执行完全相同表达式的printf
成功,你怎么能在最后的返回
stmt上获得异常。除非你的映射在调用它的getValue
方法时以某种方式损坏了自己…@kevinowh,对不起,这是一个调试stuff,我已经从代码中删除了它,但是我已经在catch块中编写了逻辑,所以它会捕获这个异常,不是吗?异常发生后映射的状态是什么?你的设计不是基于抛出的异常,这是一个非常坏的习惯。
long temp = ansMap.remove(n);