Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 用HashTableMap计算第n个Fibonacci数_Java - Fatal编程技术网

Java 用HashTableMap计算第n个Fibonacci数

Java 用HashTableMap计算第n个Fibonacci数,java,Java,我试图实现计算第n个Fibonacci数的方法Fibcac2,但是我得到了空指针异常,我不知道如何进一步。我的解决方案有意义吗?任何帮助都将不胜感激 注意:HashTableMap也是我自己实现的,所以它不同于Java的实现 更新:代码最后一行的NullPointerException 代码如下: private static int callCount2; private static Map<Integer, Long> ansMap = new LLQHashTableMap(

我试图实现计算第n个Fibonacci数的方法Fibcac2,但是我得到了空指针异常,我不知道如何进一步。我的解决方案有意义吗?任何帮助都将不胜感激

注意:HashTableMap也是我自己实现的,所以它不同于Java的实现

更新:代码最后一行的NullPointerException

代码如下:

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,好吗?它会告诉您错误发生在哪一行。@makusw
null指针异常在最后一个返回语句上为什么在catch块中有逻辑?您应该打印
ex.printStackTrace()
在那里,不要调用其他方法。如果前一个执行完全相同表达式的
printf
成功,你怎么能在最后的
返回
stmt上获得异常。除非你的映射在调用它的
getValue
方法时以某种方式损坏了自己…@kevinowh,对不起,这是一个调试stuff,我已经从代码中删除了它,但是我已经在catch块中编写了逻辑,所以它会捕获这个异常,不是吗?异常发生后映射的状态是什么?你的设计不是基于抛出的异常,这是一个非常坏的习惯。
long temp = ansMap.remove(n);