如何修复我用Java编写的石头剪纸游戏?

如何修复我用Java编写的石头剪纸游戏?,java,Java,我正试图为我的Java类编写一个RockPaperScissors游戏,但我的代码有问题。当它运行时,有时输出错误的东西,有时输出正确的东西 例如,当用户输入p时,计算机要么用Tie、My Point或Your Point来回答,然后在它下面说我们每个人都玩了什么。但它通常会说“你的观点!”“R胜过R” 您在代码中多次调用getComputerChoice(),以决定用户是赢是输还是平局。这可能会导致每一轮的几个不同的可能结果,因为这些方法调用中的每一个都会导致随机生成一个新的选择。与其多次调用

我正试图为我的Java类编写一个RockPaperScissors游戏,但我的代码有问题。当它运行时,有时输出错误的东西,有时输出正确的东西

例如,当用户输入p时,计算机要么用Tie、My Point或Your Point来回答,然后在它下面说我们每个人都玩了什么。但它通常会说“你的观点!”“R胜过R”


您在代码中多次调用
getComputerChoice()
,以决定用户是赢是输还是平局。这可能会导致每一轮的几个不同的可能结果,因为这些方法调用中的每一个都会导致随机生成一个新的选择。与其多次调用该方法,不如声明一个变量并只调用一次,然后再将其与玩家的选择进行比较。

为什么要反复调用
getComputerChoice
?声明一个变量,将单个函数调用的结果赋给它,然后在开关中使用它(您似乎已决定改为一系列
if..else
语句)。函数调用应该在循环中获取播放器输入的同一点上。
import java.util.Scanner;
public class RockPaperScissors
{       
public static void main(String[] args) 
{
   Scanner input = new Scanner(System.in);

   int tie = 0;
   int win = 0;
   int loss = 0;

   String playerChoice;
   System.out.println(RockPaperScissors.getComputerChoice());

   while (true) 
    {
        System.out.println();
        System.out.print("(R)ock, (P)aper, (S)cissors, or quit: ");

        playerChoice = input.nextLine();


        if (playerChoice.equalsIgnoreCase("quit")) break;
        else            
               //switch statement

            if (playerChoice.equalsIgnoreCase(
                RockPaperScissors.getComputerChoice()))
            {
                System.out.println("Tie!");
                tie++;
            }

            else if ((playerChoice.equalsIgnoreCase("R") && 
                        RockPaperScissors.getComputerChoice().equals("S")) ||
                    (playerChoice.equalsIgnoreCase("P") && 
                        RockPaperScissors.getComputerChoice().equals("R")) ||
                    (playerChoice.equalsIgnoreCase("S") && 
                        RockPaperScissors.getComputerChoice().equals("P")))
            {
                System.out.println("Your Point!");
                System.out.println(playerChoice + " beats " 
                    + RockPaperScissors.getComputerChoice());
                win++;

            }

            else if ((playerChoice.equalsIgnoreCase("R") && 
                        RockPaperScissors.getComputerChoice().equals("P")) ||
                    (playerChoice.equalsIgnoreCase("P") && 
                        RockPaperScissors.getComputerChoice().equals("S")) ||
                    (playerChoice.equalsIgnoreCase("S") && 
                        RockPaperScissors.getComputerChoice().equals("")))
            {
                System.out.println("My Point!");
                System.out.println(RockPaperScissors.getComputerChoice() 
                    + " beats " + playerChoice);
                loss++;

            }

            else
            {
                System.out.println("Invalid Input!");

            }
    }
    System.out.println();
    System.out.println("You won " + win + " times.");
    System.out.println("You lost " + loss + " times.");
    System.out.println("We tied " + tie + " times.");
}


public static String getComputerChoice ()
{

    int compChoiceInt;
    String compChoice;
    compChoiceInt = (int) (Math.random() * 3);
    switch (compChoiceInt)
    {
        case 0:
            compChoice = "R";
            break;
        case 1:
            compChoice = "P";
            break;
        case 2:
            compChoice = "S";
            break;
        default:
            compChoice = "Invalid Input";
            System.out.println("Invalid Input.");
            break;
    }

    return compChoice;

}