我似乎无法编译代码。每次我尝试时,}
(结束括号)都会出现错误,说错过了返回语句。
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));
}
}
答案 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
以退出应用程序是不正确的。