Java 石头,布,剪刀游戏无效进入循环

Java 石头,布,剪刀游戏无效进入循环,java,Java,我试图找出循环的位置,当用户输入除“石头”、“纸”或“剪刀”以外的任何值时,程序将停留在循环中,并在请求用户再次输入时显示“无效输入” 非常感谢您的帮助 现在,程序将显示“无效条目”,但随后将继续,而不要求用户重试 import java.util.Scanner; // Import the Scanner class import java.util.Random; // Import the random class for game /** */ publi

我试图找出循环的位置,当用户输入除“石头”、“纸”或“剪刀”以外的任何值时,程序将停留在循环中,并在请求用户再次输入时显示
“无效输入”

非常感谢您的帮助

现在,程序将显示
“无效条目”
,但随后将继续,而不要求用户重试

import java.util.Scanner;       // Import the Scanner class
import java.util.Random;       // Import the random class for game 
/**

 */
public class Challenge17
{
    // Method to determine the random choice of computer
    public static String getComputerChoice(Random random) 
    {
        int number;
        number = random.nextInt(3) + 1;
        String computerChoice;
        switch (number)
        {
            case 1:
                computerChoice = "rock";
                break;
            case 2: 
                computerChoice = "paper";
                break;
            case 3:
                computerChoice = "scissors";
                break;
            default:
                computerChoice = "";
        }
        return computerChoice;    
    }

    // Method to display the menu for choices
    public static void displayChoice( )
    {
        System.out.println("Game Options\n----------\n"
                    + "1: rock\n2: paper\n3: scissors");
    }

    // Method to request and hold user choice for game 
    public static String getUserInput(Scanner keyboard) 
    {
        String userInput;
        System.out.println("Enter your choice: ");
        userInput = keyboard.nextLine();
        return userInput;
    }

    // Method to determine winner 
    public static String determineWinner(String computerChoice, String userInput)
    {
        String winner = "Tie Game!";        // Default display Tie game
        String message = "";                // To determine the message for winner
        String displayMessage;              // To display the message for winner

        // Custom messages below
        String rockMessage = "Rock smashes scissors";
        String scissorsMessage = "Scissors cuts paper";
        String paperMessage = "Paper wraps rock";
        boolean loop = false;


        if(computerChoice.equals("rock") && userInput.equalsIgnoreCase("scissors"))
        {
            winner = " Computer wins!";
            message = rockMessage;
            loop = true;
        }
        else if (userInput.equalsIgnoreCase("rock") && computerChoice.equals("scissors"))
        {
            winner = "You win!";
            message = rockMessage;
            loop = true;
        }
        if(computerChoice.equals("scissors") && userInput.equalsIgnoreCase("paper"))
        {
            winner = " Computer wins!";
            message = scissorsMessage;
            loop = true;
        }
        else if (userInput.equalsIgnoreCase("scissors") && computerChoice.equals("paper"))
        {
            winner = "You win!";
            message = scissorsMessage;
            loop = true;
        }
        if(computerChoice.equals("paper") && userInput.equalsIgnoreCase("rock"))
        {
            winner = " Computer wins!";
            message = paperMessage;
            loop = true;
        }
        else if (userInput.equalsIgnoreCase("rock") && computerChoice.equals("scissors"))
        {
            winner = "You win!";
            message = paperMessage;
            loop = true;

        }
        else 
        {
            System.out.println("Invalid entry.");
            loop = false;
        }


        displayMessage = winner + " " + message;
        return displayMessage;
    }

    // Main method to initiate and execute game 
    public static void main(String[] args)
    {
       Random random = new Random();       // To call the random class
       Scanner keyboard = new Scanner(System.in);      // To call the scanner class

       String computerChoice;      // Hold computer input
       String userInput;           // Hold user input
       String input;               // Hold input for repeat
       char repeat;                // Character for repeat

       do
       { 
        displayChoice();            // Call method to display the choices
        computerChoice = getComputerChoice(random);     // Hold the PC random choice
        userInput = getUserInput(keyboard);     // To get the user input
        System.out.println("You chose: " + userInput + " computer chose: \n"
                                + computerChoice);
        System.out.println(determineWinner(computerChoice, userInput));                        

        // Does the user want to play again
        System.out.println("Would you like to play again?");
        System.out.print("Enter Y for yes, or N for no: ");
        input = keyboard.nextLine();
        repeat = input.charAt(0);


       }
       while (repeat == 'Y' || repeat == 'y');
    }
}

根据我的理解,我很确定你想要这种循环

    public static String getUserInput(Scanner keyboard) 
{
    String userInput;
    System.out.println("Enter your choice: ");
    userInput = keyboard.nextLine(); 
    while(!userInput.equals("rock")&&!userInput.equals("paper")&&!userInput.equals("scissors"))
    {
    System.out.println("Invalid Entry, Please re-enter your choice:");
    userInput = keyboard.nextLine();
    } //It wont go out of the loop unless it's one of the 3 choices

    return userInput;
}

您可以创建一个布尔方法

private Boolean checkUserInput(字符串输入){
如果(!input.equalsIgnoreCase(“rock”)和&!input.equalsIgnoreCase(“paper”)和&!input.equalsIgnoreCase(“剪刀”)返回false;
返回true;

然后在确定获胜者之前进行检查,如if
true
,然后运行
determinewiner(计算机选择,用户输入)
code,否则不会


这样,您可以编辑代码并在将来添加功能(如果需要)。

太完美了。非常感谢