【问题标题】:Rock Paper Scissors programme [closed]剪刀石头布计划[关闭]
【发布时间】:2020-10-17 04:08:37
【问题描述】:

我对这段代码感到很沮丧。目标是创建一个石头剪刀布游戏,最好的 3。我试图制作一个“while”循环,但我错了,最后把它报废回到我开始的那个,一个非循环代码.

如果有人能告诉我如何让它循环直到计算机或玩家获得 3 胜,我将不胜感激!!太感谢了 对不起,我应该澄清一下,它需要循环直到用户或计算机获得 3 胜,所以他们重新战斗直到用户或计算机达到 3 胜

import java.util.Scanner;
import java.util.Random;
    
public class RockPaperScissors
{

public static void main(String[] args)
{
    Scanner key;
    Random randGen;
    char userChoice, computerChoice;
    int winner, compInt;

    int computerScore;
    int userScore;
    int scoreCounter;

    /***** INITIALIZATION SECTION *****/
    key = new Scanner(System.in);
    randGen = new Random();
    userChoice = ' ';
    computerChoice = ' ';
    //winner = -1;
    compInt = -1;
    computerScore = 0;
    userScore = 0;
    scoreCounter = 0;

    System.out.println("What is your name?");
    String name = key.nextLine();
    System.out.println(name + " play rock, paper, or scissors with me!!");

    /***** INPUT SECTION *****/
    System.out.println("Please enter R for rock, P for paper, or S for scissors:");
    userChoice = key.next().toUpperCase().charAt(0);

    //key.close();

    /***** PROCESSING SECTION *****/
    compInt=randGen.nextInt(3);
    if (compInt == 0)
    {
        computerChoice = 'R';
    }
    else if (compInt == 1)
    {
        computerChoice = 'P';
    }
    else if (compInt == 2)
    {
        computerChoice = 'S';
    }
    
    winner = RockPaperScissors.decideWinner(userChoice,computerChoice);

    /***** OUTPUT SECTION *****/
    System.out.printf("Player: %c%nComputer: %c%n", userChoice, computerChoice);

   switch (winner)
    {
        case 0:
            System.out.println("It's a tie!");
            System.out.println(name + ": " + userScore + ", Computer:" + computerScore );
            break;

        case 1:
            System.out.println("You won!");
            userScore++;
            System.out.println(name + ": " + userScore + ", Computer:" + computerScore );
            break;

        case 2:
            System.out.println("Computer won!");
            computerScore++;
            System.out.println(name + ": " + userScore + ", Computer:" + computerScore );
            break;

        default:
            System.out.println("Invalid choice, try again.");
            break;
    }
    //System.out.println("Thanks for playing!);
}

/***** STATIC METHODS *****/
/**Description: given two characters (R,P, or S) determines winner using rock
 * paper rules. Assume input is valid and error checking is done in main
 * programme. **/

public static int decideWinner(char p1,char p2)
{
    String combo;
    combo = String.format("%c%c", p1, p2);

    switch(combo)
    {
        case "RS":
        case "PR":
        case "SP":
            return 1;

        case "RP":
        case "PS":
        case "SR":
            return 2;

        case "RR":
        case "PP":
        case "SS":
            return 0;

    }
    return -1;
}

}
/***************************************************
 while(userScore == 3)
        {
            System.out.println("You won the game" +name+ "! Congratulations");
            scoreCounter++;
        }
        while(computerScore == 3)
        {
            System.out.println("Sorry " +name+ ", Computer won...");
            scoreCounter++;
        }
 **************************************************/

【问题讨论】:

  • 我在想,如果你想使用 while 循环,你只需要跟踪每个人有多少胜利然后 while ( (playerWins + computerWins) .
  • @OmarAbdelBari 如果是 3 个中最好的,他只需要记录已经玩了多少轮。很简单:while (rounds < 3) {//code}.
  • 嗨,欢迎来到堆栈溢出。如果我的回答解决了您的问题,请将其标记为已接受 :)
  • @M0e 这不完全正确,如果一轮是平局,则不计入满足条件。 3 中最好的 2 意味着 2 胜。如果有 1 或 3 个平局,谁会赢?
  • 但这也提出了另一点,如果一个玩家获得 2 胜,那么从技术上讲,它可以在 2 个非平局回合中结束。所以我想更准确的是 while (playerWins

标签: java for-loop while-loop do-while


【解决方案1】:

尝试将您的代码拆分为每个方法都有自己的任务,这样您就可以更轻松地布局和控制程序的行为。例如。在用户输入的情况下,您可以在输入无效的情况下递归调用该方法。 对于 while 循环,我只是添加了一个计数器,每次游戏后都会增加,直到 3。

import java.util.Scanner;
import java.util.Random;
    
public class RockPaperScissors
{

    private static int totalGames = 0;

public static void main(String[] args)
{
    Scanner key;
    Random randGen;
    char userChoice, computerChoice;
    int winner;

    int computerScore;
    int userScore;

    /***** INITIALIZATION SECTION *****/
    key = new Scanner(System.in);
    randGen = new Random();
    computerChoice = ' ';
    //winner = -1;
    computerScore = 0;
    userScore = 0;

    System.out.println("What is your name?");
    String name = key.nextLine();
    System.out.println(name + " play rock, paper, or scissors with me!!");


    while(totalGames < 3) {
        userChoice = getUserChoice(key, false);

        /* PROCESSING SECTION */
        computerChoice = getComputerChoice(computerChoice, randGen.nextInt(3));

        winner = RockPaperScissors.decideWinner(userChoice, computerChoice);

        totalGames++;

        /* OUTPUT SECTION */
        System.out.printf("Player: %c%nComputer: %c%n", userChoice, computerChoice);

        switch (winner) {
            case 0:
                System.out.println("It's a tie!");
                System.out.println(name + ": " + userScore + ", Computer:" + computerScore);
                break;

            case 1:
                System.out.println("You won!");
                userScore++;
                System.out.println(name + ": " + userScore + ", Computer:" + computerScore);
                break;

            case 2:
                System.out.println("Computer won!");
                computerScore++;
                System.out.println(name + ": " + userScore + ", Computer:" + computerScore);
                break;

            default:
                System.out.println("Invalid choice, try again.");
                break;
        }
    }
    //System.out.println("Thanks for playing!);
}

    private static char getComputerChoice(char computerChoice, int compInt) {
        if (compInt == 0)
        {
            computerChoice = 'R';
        }
        else if (compInt == 1)
        {
            computerChoice = 'P';
        }
        else if (compInt == 2)
        {
            computerChoice = 'S';
        }
        return computerChoice;
    }

    private static char getUserChoice(Scanner key, boolean retry) {
        char userChoice;
        /* INPUT SECTION */
        if(retry)
            System.out.println("You entered an invalid input, please try again...");
        System.out.println("Please enter R for rock, P for paper, or S for scissors:");
        try {
            userChoice = key.next().toUpperCase().charAt(0);
            if(userChoice != 'R' && userChoice != 'P' && userChoice != 'S')
                return getUserChoice(key, true);
        } catch (Exception e){
            return getUserChoice(key, true);
        }
        return userChoice;
    }

/***** STATIC METHODS *****/
/**Description: given two characters (R,P, or S) determines winner using rock
 * paper rules. Assume input is valid and error checking is done in main
 * programme. **/

public static int decideWinner(char p1,char p2)
{
    String combo;
    combo = String.format("%c%c", p1, p2);

    switch(combo)
    {
        case "RS":
        case "PR":
        case "SP":
            return 1;

        case "RP":
        case "PS":
        case "SR":
            return 2;

        case "RR":
        case "PP":
        case "SS":
            return 0;

    }
    return -1;
}

}
/***************************************************
 while(userScore == 3)
        {
            System.out.println("You won the game" +name+ "! Congratulations");
            scoreCounter++;
        }
        while(computerScore == 3)
        {
            System.out.println("Sorry " +name+ ", Computer won...");
            scoreCounter++;
        }
 **************************************************/

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 2017-02-10
    • 2016-01-16
    相关资源
    最近更新 更多