Java 递归方法返回错误的值



我对这种递归方法有点问题。我对Java相当陌生。

此方法检查输入是仅"退出"还是"开始",后跟两次"用户"或"简单"。 除了返回之外,它工作正常。如果我输入了一个错误的输入,然后它的正确返回了我显然无法继续工作的先前错误输入,这是为什么?

我以前遇到过这个问题,但总是以某种方式设法避免它。

您可能会注意到,我在验证后打印出有效的 commadnd,这工作正常并产生我需要的结果。但是当打印出第 2 行函数的返回时,就会出现上述问题。我已经在打印的字符串中添加了数字,以便我可以识别哪个是哪个。

我已经尝试在有有效命令时立即返回,但我仍然需要在最后重新运行,因为如果 return 语句仅在条件语句中,该函数会给我一个错误,因此问题仍然存在。

感谢您的任何帮助!

public static void main(String[] args) {
System.out.println(setup() + "3");
}
static String setup() {
System.out.print("Input command: ");
String command = input.nextLine();
String[] split = command.split(" ");

if(!(command.equals("exit") || split.length == 3)) {
System.out.println("Invalid parameters!");
setup();
}
else {
if(command.equals("exit")) {
System.out.println("Valid parameters! Exit");
System.out.println(command + "2");
}
else if(split[0].equals("start") && (split[1].equals("easy") || (split[1].equals("user")) && split[2].equals("easy") || split[2].equals("user"))) {
System.out.println("Valid parameters! Start");
System.out.println(command + "1");
}
else {
System.out.println("Invalid parameters!");
setup();
}   
}
return command;
}

首先,我认为您的意思是将回避调用称为return setup()其次,当使用条件运算符 (&&, ||( 时,您应该使用 (( 来确保获得预期的逻辑条件。 如果要将其更新为:

  • return setup而不是setup()

  • 验证你用括号((包装条件的正确部分:

    else if (split[0].equals("start") && ((split[1].equals("easy") || split[1].equals("user")) && (split[2].equals("easy") || split[2].equals("user")))) { System.out.println("Valid parameters! Start"); System.out.println(command + "1"); }

最新更新