Проверка ввода из пользовательских строк java с использованием логического значения - PullRequest
0 голосов
/ 26 марта 2020

Я создаю игру «Ножницы из каменной бумаги», и единственная часть, над которой я зациклен, - это проверка ввода. Я пробовал циклы do / while, try / catch, но просто не могу заставить его работать должным образом. Ниже приведено то, что у меня есть для метода getUserChoice. Любая помощь будет принята с благодарностью. Спасибо!

public String getUserChoice(){
    String user = " ";
    boolean error = false;

    Scanner in = new Scanner(System.in);
    System.out.println("Please enter rock, paper, or scissors: ");
    user = in.nextLine(); //reads user input

    do {
        if (user.equalsIgnoreCase("rock")) {
            user = "rock";
            error = false;
        }
        else if (user.equalsIgnoreCase("paper")) {
            user = "paper";
            error = false;
        }
        else if (user.equalsIgnoreCase("scissors")) {
            user = "scissors";
            error = false;
        }
    }
    while(error); {
        System.out.println("Please enter valid input: ");
    }
    return user;
}

Ответы [ 2 ]

0 голосов
/ 26 марта 2020

Вы можете слегка изменить свой код на:

public String getUserChoice(){
String user = " ";
boolean error = true;

Scanner in = new Scanner(System.in);
System.out.println("Please enter rock, paper, or scissors: ");
user = in.nextLine(); //reads user input

do {
    if (user.equalsIgnoreCase("rock")) {
        user = "rock";
        error = false;
    }
    else if (user.equalsIgnoreCase("paper")) {
        user = "paper";
        error = false;
    }
    else if (user.equalsIgnoreCase("scissors")) {
        user = "scissors";
        error = false;
    } else {
        System.out.println("Please enter valid input: ");
        user = in.nextLine(); 
    }
}
while(error);

return user;
}

boolean error = true; делает блок while бесконечно повторяющимся, в противном случае он выпрыгнет на первой итерации.

The * Блок 1007 * - это то, что выполняется, когда вводится не хорошее состояние. System.out вне while выполняется только после того, как l oop завершает

Более эффективный или читабельный способ реализовать это - заменить блок do-while на:

while (true){
    if (user.equalsIgnoreCase("rock") || user.equalsIgnoreCase("paper")  || user.equalsIgnoreCase("scissors")){
        return user;
    } else {
        System.out.println("Please enter valid input: ");
        user = in.nextLine(); 
    }       
}
0 голосов
/ 26 марта 2020

Полагаю, вы хотите ввести только "камень", "бумага" и "ножницы"

, а просто

if(!input.equals("rock") || !input.equals("paper") || 
            !input.equals("scissors")) System.out.println("invalid input");

или
if(!input.matches("rock|paper|scissors")) System.out.println("invalid input");

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