Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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 IsFibo未返回所需结果_Java_Fibonacci - Fatal编程技术网

Java IsFibo未返回所需结果

Java IsFibo未返回所需结果,java,fibonacci,Java,Fibonacci,这是我想到的解决IsFibo HackerRank问题的方法。(). 我想知道为什么它在5分钟内不会返回“IsFibo”。我的逻辑可能是错误的,如果有人指出我的错误,我将不胜感激。代码如下: import java.io.*; import java.util.*; import java.text.*; import java.math.*; import java.util.regex.*; public class Solution { public static ArrayLi

这是我想到的解决IsFibo HackerRank问题的方法。(). 我想知道为什么它在5分钟内不会返回“IsFibo”。我的逻辑可能是错误的,如果有人指出我的错误,我将不胜感激。代码如下:

import java.io.*;
import java.util.*;
import java.text.*;
import java.math.*;
import java.util.regex.*;

public class Solution {
    public static ArrayList<BigInteger> fibList = new ArrayList<BigInteger>();

    public static void main(String[] args) {
    /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner in = new Scanner(System.in);
        int numCases = in.nextInt();

        fibList.add(BigInteger.valueOf(0));
        fibList.add(BigInteger.valueOf(1));

        while(in.hasNextLine()) {
            System.out.println(checkFibo(in.nextBigInteger()));
            System.out.println(fibList);
        }
    }

    public static String checkFibo(BigInteger i) {
        int lastIndex = fibList.size() - 1;
        int compareRes = i.compareTo(fibList.get(lastIndex));

        System.out.println("Last fib num: " + fibList.get(lastIndex));
        System.out.println("CompareRes: " + compareRes);

        switch(compareRes) {
            case 0:
                return "IsFibo";
            case 1:
                BigInteger newFib = fibList.get(lastIndex-1).add(fibList.get(lastIndex));
                fibList.add(newFib);
                checkFibo(i);
                break;
            default:
                break;
        }

        return "IsNotFibo";

    }
}
import java.io.*;
导入java.util.*;
导入java.text.*;
导入java.math.*;
导入java.util.regex.*;
公共类解决方案{
public static ArrayList fibList=new ArrayList();
公共静态void main(字符串[]args){
/*在此处输入代码。从STDIN读取输入。将输出打印到STDOUT。您的类应命名为Solution*/
扫描仪输入=新扫描仪(系统输入);
int numCases=in.nextInt();
fibList.add(biginger.valueOf(0));
fibList.add(biginger.valueOf(1));
while(在.hasNextLine()中){
System.out.println(checkFibo(in.nextbiginger());
System.out.println(fibList);
}
}
公共静态字符串checkFibo(biginger i){
int lastIndex=fibList.size()-1;
int compareRes=i.compareTo(fibList.get(lastIndex));
System.out.println(“Last fib num:+fibList.get(lastIndex));
System.out.println(“CompareRes:+CompareRes”);
开关(比较器){
案例0:
返回“IsFibo”;
案例1:
biginger newFib=fibList.get(lastIndex-1).add(fibList.get(lastIndex));
fibList.add(newFib);
checkFibo(i);
打破
违约:
打破
}
返回“IsNotFibo”;
}
}

您的代码有两个问题:

  • 案例1:不传回递归调用的返回值
  • 属于默认实现的情况1被完全忽略(即,在处理了较大的输入之后,代码无法处理较小的输入)
  • 下面是一个工作代码:

    import java.math.BigInteger;
    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class Solution {
        public static ArrayList<BigInteger> fibList = new ArrayList<BigInteger>();
    
        public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
            Scanner in = new Scanner(System.in);
    
            fibList.add(BigInteger.valueOf(0));
            fibList.add(BigInteger.valueOf(1));
    
            while(in.hasNextLine()) {
                BigInteger nextBigDecimal = in.nextBigInteger();
                System.out.println("input:" + nextBigDecimal);
                System.out.println("isFibo: " + checkFibo(nextBigDecimal));
                System.out.println(fibList);
            }
        }
    
        public static boolean checkFibo(BigInteger i) {
            int lastIndex = fibList.size() - 1;
            int compareRes = i.compareTo(fibList.get(lastIndex));
    
            System.out.println("Last fib num: " + fibList.get(lastIndex));
            System.out.println("CompareRes: " + compareRes);
    
            boolean isFibo = false;
    
            switch(compareRes) {
                case 0:
                    isFibo = true;
                    break;
                case 1:
                    BigInteger newFib = fibList.get(lastIndex-1).add(fibList.get(lastIndex));
                    fibList.add(newFib);
                    isFibo = checkFibo(i);
                    break;
                case -1:
                    isFibo = fibList.contains(i);
                    break;
            }
            return isFibo;
        }
    }
    
    import java.math.biginger;
    导入java.util.ArrayList;
    导入java.util.Scanner;
    公共类解决方案{
    public static ArrayList fibList=new ArrayList();
    公共静态void main(字符串[]args){
    /*在此处输入代码。从STDIN读取输入。将输出打印到STDOUT。您的类应命名为Solution*/
    扫描仪输入=新扫描仪(系统输入);
    fibList.add(biginger.valueOf(0));
    fibList.add(biginger.valueOf(1));
    while(在.hasNextLine()中){
    BigInteger nextBigDecimal=in.nextBigInteger();
    System.out.println(“输入:+nextBigDecimal”);
    System.out.println(“isFibo:+checkFibo(nextBigDecimal));
    System.out.println(fibList);
    }
    }
    公共静态布尔checkFibo(biginger i){
    int lastIndex=fibList.size()-1;
    int compareRes=i.compareTo(fibList.get(lastIndex));
    System.out.println(“Last fib num:+fibList.get(lastIndex));
    System.out.println(“CompareRes:+CompareRes”);
    布尔值isFibo=false;
    开关(比较器){
    案例0:
    isFibo=真;
    打破
    案例1:
    biginger newFib=fibList.get(lastIndex-1).add(fibList.get(lastIndex));
    fibList.add(newFib);
    isFibo=检查fibo(i);
    打破
    案例1:
    isFibo=fibList.contains(i);
    打破
    }
    返回isFibo;
    }
    }