Вы можете слегка изменить свой код на:
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();
}
}