简体   繁体   中英

Rock Paper Scissors game

I'm new to programming and I've been trying to create a simple Rock Paper Scissors game. Basically, it uses a while loop and asks the user whether they want to play (or continue). Once they no longer want to, the program has to print out the total number of games, number of wins, number of losses and percentage of wins. I've got the entire program to work, except it always says the percentage of wins is 0.0%, even when it's not. I already used an if statement to avoid any divide by zero error. I'm not getting any runtime or compiler errors, so I'm either missing something or there's a logic error I just cannot find. I would like to continue using the Scanner.

import java.util.Scanner; 

public class RockPaperScissors {

/*
 * Program allows user to play Rock, Paper and Scissors as many times as desired by entering Y until they enter N.
 * Program will print amount of games played, amount lost, amount won and percentage won. 
 * User must enter "Y", "N", "Rock", "Paper" or "Scissors" with correct capitalization and spelling. 
 */ 

public static void main(String[] args) {

    Scanner input = new Scanner(System.in);

    int playerWins = 0;
    int compWins = 0;
    int gamesPlayed = 0;

    while (true) {
        System.out.println("Do you want to play Rock Paper Scissors (Y/N): ");
        String play = input.nextLine();

        // user terminates game and program prints number of wins, losses and percentage of wins.
        if (play.equals("N")) {

            System.out.println("You played a total of " + gamesPlayed + " matches against the computer");
            System.out.println("The computer won " + compWins + " matches");
            System.out.println("You won " + playerWins + " matches");

            // 0% wins when no games are played.
            if (gamesPlayed == 0) { 
                System.out.println("You won 0% of the time!");
                break;

            } else if (gamesPlayed > 0) {
                double totalWins = (int)(playerWins / gamesPlayed) * 100;
                System.out.println("You won " + totalWins + "% of the time!");
                break;
            }

        } else if ((!play.equals("N")) && (!play.equals("Y"))) {
            System.out.println("Invalid entry");
        } else {

            System.out.println("Welcome to Rock, Paper and Scissors!");
            System.out.print("Select \"Paper\", \"Rock\" or \"Scissors\": ");
            String decision = input.nextLine();
            System.out.println("Your selection: " + decision);

            // random number generator producing integer values between 1 to 3 for computer's choices.
            // 1 is for Rock, 2 is for Paper and 3 is for Scissors.
            int num = (int)(Math.random() *  (3-0) + 1);

            switch (num) {

                // Computer picks Rock
                case 1:
                    if (decision.equals("Rock")) {
                    System.out.println("Tie, you and the computer selected rock");
                    gamesPlayed++;
                } else if (decision.equals("Paper")) {
                    System.out.println("You win, paper beats rock!");
                    gamesPlayed++;
                    playerWins++;
                } else if (decision.equals("Scissors")) {
                    System.out.println("Computer wins, rock beats scissors!");
                    gamesPlayed++;
                    compWins++;
                } else {
                    System.out.println(decision + " is not a valid input");
                }
                break;
                case 2:
                    // computer picks Paper
                    if (decision.equals("Rock")) {
                    System.out.println("Computer wins, rock beats paper!");
                    gamesPlayed++;
                    compWins++;
                } else if (decision.equals("Paper")) {
                    System.out.println("Tie, you and the computer selected paper");
                    gamesPlayed++;
                } else if (decision.equals("Scissors")) {
                    System.out.println("You win, scissors beats paper");
                    gamesPlayed++;
                    playerWins++;
                } else {
                    System.out.println(decision + " is not a valid input");
                }
                break;
                case 3:
                    // computer picks Scissors
                    if (decision.equals("Rock")) {
                    System.out.println("You win, rock beats scissors");
                    gamesPlayed++;
                    playerWins++;
                } else if (decision.equals("Paper")) {
                    System.out.println("Computer wins, scissors beats paper");
                    gamesPlayed++;
                    compWins++;
                } else if (decision.equals("Scissors")) {
                    System.out.println("Tie, you and the computer selected scissors");
                    gamesPlayed++;
                } else {
                    System.out.println(decision + " is not a valid input");
                }
                break;

            } 
        }

    }

}

}

The problem is at double totalWins = (int)(playerWins / gamesPlayed) * 100; . Since playerWins and gamesPlayed are both integral type (specifically int type), Java is doing 'Integer Division', which returns the quotient of the division as result and ignore the remainder. So to prevent it from doing this you are best changing that line to:

double totalWins = (playerWins * 100.0) / gamesPlayed;
//                 /------------------\
// This converts the `playerWins` to a `double` and does the division as you expect

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM