Java метод рекурсии возвращает неверное значение - PullRequest
0 голосов
/ 20 июня 2020

У меня небольшая проблема с этим методом рекурсии. Я новичок в Java.

Этот метод проверяет, является ли ввод либо «только выход», либо «начало», за которым следует два раза «пользователь» или «простой». Работает нормально кроме возврата. Если я ввожу неправильный ввод, а затем право на него возвращает предыдущий неправильный ввод, с которым я, очевидно, не могу продолжить работу, почему?

У меня была эта проблема раньше, но всегда как-то удавалось избежать это.

Вы могли заметить, что я распечатываю действительную команду сразу после ее проверки, это работает нормально и дает нужный мне результат. Но при выводе на печать возврата функции в строке 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;
    }

1 Ответ

0 голосов
/ 20 июня 2020

в первую очередь, я думаю, что вы хотели вызвать рекурсивный вызов как return setup() во-вторых, при использовании условного оператора (&&, ||) вы должны использовать (), чтобы убедиться, что вы получили условие logi c, которое вы ожидать. если вы обновите его до:

  • 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"); }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...