【问题标题】:Java recursion method returns wrong valueJava递归方法返回错误值
【发布时间】:2020-06-20 22:53:24
【问题描述】:

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

此方法检查输入是“exit”还是“start”,后跟两次“user”或“easy”。 除了退货外,它工作正常。如果我输入了一个错误的输入,然后它的右边返回了之前我显然无法继续工作的错误输入,这是为什么呢?

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

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

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

感谢您的帮助!

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();替换setup();
  • 您的问题是什么?我阅读了您的帖子两次,但无法理解预期的行为/结果是什么?
  • setup(); -> command = setup();

标签: java recursion


【解决方案1】:

首先,我认为您的意思是将递归调用称为 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"); }

【讨论】:

    猜你喜欢
    • 2016-02-05
    • 1970-01-01
    • 2013-09-14
    • 1970-01-01
    • 1970-01-01
    • 2014-06-22
    • 2014-06-12
    • 2021-08-13
    • 2014-02-27
    相关资源
    最近更新 更多