Java 返回未编译的int的递归方法

Java 返回未编译的int的递归方法,java,recursion,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")){

我现在正在学习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语句。 我的递归方法有什么问题吗

递归调用中缺少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
    }
}

此处缺少Return语句

else {
   getCommand();
}
方法的所有路径都需要返回某些内容。

在最后一种情况下,您需要添加一个返回类型

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();
    }
}
此函数用于获取命令;调用返回一个int值,但在else情况下不返回,因此如果控件落在else情况下,则将执行递归函数调用,尽管无法保证getCommand;java说,由于else情况,编译器将返回一个int值,因此会检测到错误,并根据返回类型不是void的情况

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


为什么不去掉最后一个呢?第43行:returngetcommand;而不仅仅是获取命令;尽管如此,我不会对这样的事情使用递归方法。如果在输入无效命令时未针对尾部递归进行优化,则堆栈使用率可能会继续增长。只需使用循环。您需要始终返回值,即使在else分支中,例如return getCommand;。您需要递归地实现这一点吗?这实际上会导致堆栈溢出,这很容易通过使方法迭代而不是递归来解决。我不是,但无法想出一种简洁的编写方法。从一个whiletrue{}循环开始,但我对此并不满意。你有什么更好的主意吗?老兄,你太快了,在11秒钟内就成功了,格雷特汉克斯:该死的,快疯了haha@PaulEtscheit是的,甚至我的页面都花了一点时间才看到这个答案:P