递归方法返回int不编译

时间:2016-11-04 14:10:56

标签: java recursion

我现在正在学习Java并且有一个任务,我应该创建一个方法,在输入两个关键字之一之前不断询问用户输入。然后,它应该返回一个int。

public static int getCommand(){
    String command = IOTools.readString("Enter Command!");
    if (command.equals("exit")){
        return 1;
    } else if (command.equals("shift")){
        return 0;
    } else {
        getCommand();
    }
}

我遇到的问题是eclipse告诉我要么将返回类型更改为void,要么在if块之后添加一个return语句。 enter image description here 我的递归方法有问题吗?

3 个答案:

答案 0 :(得分:6)

您在递归调用中缺少return语句

public static int getCommand(){
    String command = IOTools.readString("Enter Command!");
    if (command.equals("exit")){
        return 1;
    } else if (command.equals("shift")){
        return 0;
    } else {
        return getCommand(); // Added return here
    }
}

答案 1 :(得分:1)

此处缺少退货声明

else {
   getCommand();
}

你的方法的所有路径都需要返回一些东西。

答案 2 :(得分:1)

您需要在最后一种情况下添加return类型

public static int getCommand(){
    String command = IOTools.readString("Enter Command!");
    if (command.equals("exit")){
        return 1;
    } else if (command.equals("shift")){
        return 0;
    } else {
        return getCommand();
    }
}

此函数getCommand();调用返回int值但不在else情况下,因此如果控件属于else情况,那么您的递归函数调用将被执行虽然无法保证getCommand();会因int情况而返回else值,因此编译器会检测到因此错误,并且根据这种情况,return类型不是{ {1}},java说

  

函数中的每个执行路径都必须指向RETURN语句