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