程序不会编译并且缺少return语句错误

时间:2016-02-10 15:06:26

标签: java if-statement return public fibonacci

我似乎无法编译代码。每次我尝试时,}(结束括号)都会出现错误,说错过了返回语句。

import java.util.Scanner
public class Fibonacci
{
   public static int fibonacciNumber( int n)
   {
       while(n != 00)
       {
           if( n == 0)
           {
               return 0; 
           }
           else if(n == 1)
           {
               return 1;
           }
           else if(n > 1)
           {
               return fibonacciNumber(n-1) + fibonacciNumber(n-2);
           }
        }
    }

    public static void main(String [] args)
    {
         Scanner in = new Scanner(System.in);
         System.out.println("Enter a number to calculate(enter 00 to quit): ");
         int n = in.nextInt();

         System.out.println( fibonacciNumber( n));
     }
}

3 个答案:

答案 0 :(得分:2)

因为您错过了return语句。考虑一下你的方法:

public static int fibonacciNumber( int n)
{
    while(n != 00)
    {
        // some logic that returns something
    }
}

如果n 等于00会怎样?什么都没有归还。编译器确保方法的每个逻辑路径都返回一个值。因此,在while循环后,您需要返回一个值,以防从未输入循环。

或者,就此而言,n小于0会发生什么?您的当前return语句都不会被达到,事实上,您将拥有无限循环。

基本上,如果您的方法声明它返回一个值,那么它必须返回一个值。目前你不能保证,因此编译错误。

答案 1 :(得分:0)

当然,它要求退货声明。

public static int fibonacciNumber( int n)

你的函数需要返回一个整数,但你没有返回任何东西,因为你有很多if嵌套返回。

  else if(n > 1)
  {
    return fibonacciNumber(n-1) + fibonacciNumber(n-2);
  }
//HERE SHOULD YOUR RETURN BE, outside of the while loop

答案 2 :(得分:0)

似乎您尝试开发一个打印第n个fibonnaci-Number的应用程序,直到用户决定退出该应用程序。但是对于那个目标,你的while循环位于错误的位置。它应位于主要包含用户输入的读数和fibonnaci数的计算。然后很明显,你错过了return,因为斐波纳契方法有四种可能的选择:

1. n==0
2. n==1
3. n>1
4. all else (which is n<0)

您现在可以为负n个案例返回一些值,抛出异常或将其与n&gt; 1案例合并。

后者看起来像这样:

import java.util.Scanner;
public class Fibonacci {
    public static int fibonacciNumber( int n) {
        if(n == 0) {
            return 0; 
        } else if(n == 1) {
            return 1;
        }
        return fibonacciNumber(n-1) + fibonacciNumber(n-2);
    }

    public static void main(String [] args) {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter a number to calculate(enter 00 to quit): ");
        int n = in.nextInt();
        while(n != 0) {
            System.out.println( fibonacciNumber( n));
            in.nextLine(); // Just to parse the line-separator
            n = in.nextInt();
        }
    }
}

由于您在控制台中键入数字但通过enter-key提交,因此需要in.nextLine()。这会导致下次调用in.nextXXX()时读取Line-Break-Character,这将导致异常。此外,由于您键入in.nextInt()时使用00,因此会将其解析为值为0的整数。因此,告诉用户键入00以退出应用程序是不正确的。