摇滚,纸张,剪刀游戏无效的进入循环

时间:2018-03-16 01:28:11

标签: java

我试图弄清楚当用户输入除“摇滚”,“纸张”或“剪刀”以外的任何值时循环的位置,程序保持在循环中并在请求时显示"Invalid entry"用户再次进入。

非常感谢任何帮助。

现在,程序将显示"Invalid entry",但会继续,而不会要求用户再试一次。

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');
    }
}

2 个答案:

答案 0 :(得分:0)

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

    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;
}

答案 1 :(得分:0)

您可以创建一个布尔方法。

private Boolean checkUserInput(String input) { if(!input.equalsIgnoreCase("rock") && !input.equalsIgnoreCase("paper") && !input.equalsIgnoreCase("scissors")) return false; return true;

然后,在确定获胜者之前进行检查,如果true,则运行determineWinner(computerChoice, userInput)代码,否则不会。

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