Петля не заканчивается - PullRequest
       24

Петля не заканчивается

0 голосов
/ 12 октября 2018

Я пытаюсь зациклить этот оператор if, пока пользователь не введет правильный ответ.это не заканчивается, когда бежал, даже если я вставил правильный ввод.Также, как я могу использовать переменную playerPick вне цикла while, не путая код?

System.out.println("Please choose either Applaro, Svartra, Tunholmen, or Godafton.");
boolean temp = true;
    while (temp) {
        String playerPick = console.next();
        if (!playerPick.equals("Applaro") && !playerPick.equals("Svartra") && !playerPick.equals("Tunholmen")
                && !playerPick.equals("Godafton")) {
            System.out.println("Please enter a valid input.");
        } else if (playerPick.equals("Applaro") || playerPick.equals("Svartra") || playerPick.equals("Tunholmen")
                || playerPick.equals("Godafton")) {
            System.out.println("You have picked " + playerPick);
        }
    }

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

Цикл while будет продолжаться до тех пор, пока temp имеет значение true.Во вложенном операторе if мы устанавливаем temp как false, что выходит из цикла.

Что касается playerPick : переменная объявляется вне цикла, поэтому она должна быть доступна в любом месте функции, которая находится ниже декларации (код читается сверху вниз).Если вы пытаетесь получить доступ к playerPick из другого метода, вам нужно объявить переменную в суперклассе.

Примечание: я также очистил ваше выражение if, чтобы сделать его более читабельным,

Надеюсь, это поможет!

System.out.println("Please choose either Applaro, Svartra, Tunholmen, or Godafton.");
boolean temp = true;
String playerPick = "";
    while (temp) {
        playerPick = console.next();
        if (playerPick.equals("Applaro") || playerPick.equals("Svartra") || playerPick.equals("Tunholmen") || playerPick.equals("Godafton")) {
            System.out.println("You have picked " + playerPick);
            temp = false;
        }
        else
            System.out.println("Please enter a valid input.");
    }
0 голосов
/ 12 октября 2018

Это может удалить менее читаемую переменную "temp".Цикл do while лучше указывает на приглашение пользователя.Я думаю, что более читабельно удалить предложение if-else в цикле while.

public static void main(String[] args) {
    String prompt = "Please choose either Applaro, Svartra, Tunholmen, or Godafton.";
    String playerPick = null;
    try (Scanner console = new Scanner(System.in)) {
        do {
            System.out.println(prompt);
            playerPick = console.next();                   
            prompt = "Please enter a valid input.";
        } while (!playerPick.equals("Applaro") && !playerPick.equals("Svartra") && !playerPick.equals("Tunholmen") && !playerPick.equals("Godafton"));
        System.out.println("You have picked " + playerPick);

    } catch(Exception ex) {
        System.out.println("Please enter a valid input.");
    }        
}
0 голосов
/ 12 октября 2018

Просто установите temp = false как в примере ниже:

System.out.println("Please choose either Applaro, Svartra, Tunholmen, or Godafton.");
    boolean temp = true;
        while (temp) {
            String playerPick = console.next();
            if (!playerPick.equals("Applaro") && !playerPick.equals("Svartra") && !playerPick.equals("Tunholmen")
                    && !playerPick.equals("Godafton")) {
                System.out.println("Please enter a valid input.");
            } else if (playerPick.equals("Applaro") || playerPick.equals("Svartra") || playerPick.equals("Tunholmen")
                    || playerPick.equals("Godafton")) {
                System.out.println("You have picked " + playerPick);
                //here
                temp = false;
            }
        }
...