java - Java Rock Paper 游戏循环次数过多
问题描述
我必须制作一个石头剪刀布游戏,你可以在其中与电脑对战。1,2,3分别用于石头、纸、剪刀。循环5次,分别显示电脑赢和玩家赢的数量。我得到了一切工作,除了循环。当你输入一个大于 3 的数字时,它应该说“无效”并循环直到你玩了 5 个有效的游戏。但是,如果你输入奇数个错误答案,它会让你玩 6 个游戏,如果你输入偶数个错误答案,它会让你玩 5 个游戏。我需要它来让你玩 5 场比赛,不管奇数和偶数是否错误。请帮忙。
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int player = 0, computer = 0;
int computerScore = 0, playerScore = 0;
int loops = 0;
int rock = 1;
int paper = 2;
int scissors = 3;
for (int i = 1; i < 6; i++) {
computer = (int) (Math.random() * 3) + 1;
System.out.println("Enter 1 for Rock, 2 for Paper, 3 for Scissors");
player = reader.nextInt();
if (player > scissors) {
System.out.println("Not a valid response");
System.out.println("Enter 1 for Rock, 2 for Paper, 3 for Scissors");
player = reader.nextInt();
i--;
}
if (player == computer) {
System.out.println("Tie");
} else if (player == rock) {
if (computer == paper) {
System.out.println("Player picked Rock, Computer picked Paper, Computer wins");
computerScore++;
} else if (computer == scissors) {
System.out.println("Player picked Rock, Computer picked Scissors, Player wins");
playerScore++;
}
} else if (player == paper) {
if (computer == rock) {
System.out.println("Player picked Paper, Computer picked Rock , Player wins");
playerScore++;
} else if (computer == scissors) {
System.out.println("Player picked Paper, Computer picked Scissors, Computer wins");
computerScore++;
}
} else if (player == scissors) {
if (computer == rock) {
System.out.println("Player picked Scissors, Computer picked Rock , Computer wins");
computerScore++;
} else if (computer == paper) {
System.out.println("Player picked Scissors, Computer picked Paper, Player wins");
playerScore++;
}
}
}
System.out.println("");
System.out.println("Computer Wins " + computerScore);
System.out.println("Player Wins " + playerScore);
}
解决方案
为了让事情变得更容易,我建议使用 while 循环。
例如:
Scanner reader = new Scanner (System.in);
int computerScore = 0, playerScore = 0;
int rock = 1;
int paper = 2;
int scissors = 3;
int numberOfPlayerTurns = 0;
final int MAX_PLAYER_TURNS = 5;
while (numberOfPlayerTurns < MAX_PLAYER_TURNS)
{
int computer = (int) (Math.random() * 3) + 1;
int player = reader.nextInt();
System.out.println("Enter 1 for Rock, 2 for Paper, 3 for Scissors");
// invalid
if (player > scissors || player <= 0)
{
System.out.println("Not a valid response");
}
else
{
numberOfPlayerTurns++;
if (player == computer)
{
System.out.println("Tie");
}
else if (player == rock )
{
if(computer == paper)
{
System.out.println ("Player picked Rock, Computer picked Paper, Computer wins");
computerScore++;
}
else
{
System.out.println ("Player picked Rock, Computer picked Scissors, Player wins");
playerScore++;
}
}
else if (player == paper)
{
if(computer == rock)
{
System.out.println ("Player picked Paper, Computer picked Rock , Player wins");
playerScore++;
}
else
{
System.out.println ("Player picked Paper, Computer picked Scissors, Computer wins");
computerScore++;
}
}
// scissors
else
{
if(computer == rock)
{
System.out.println ("Player picked Scissors, Computer picked Rock , Computer wins");
computerScore++;
}
else
{
System.out.println ("Player picked Scissors, Computer picked Paper, Player wins");
playerScore++;
}
}
}
}
System.out.println("");
System.out.println("Computer Wins " + computerScore);
System.out.println("Player Wins " + playerScore);
推荐阅读
- c++ - 我如何在 C 中编写此 C++ 代码。链表迭代?
- python - 将类的实例附加到列表会覆盖以前的实例属性
- webpack - 如何以角度使用 webpack“output.devtoolNamespace”
- vue.js - NUXT 插件 CSS 未在生产中加载
- accessibility - aria role="application" 和制表符
- reactjs - 无法获取数据 ReactJS
- python - Soup 可以在一个 IMBD 页面上工作,但不能在另一个页面上工作。怎么解决?
- apollo - ApolloGraphQL:使用订阅挂钩语法和 onSubscriptionData?
- scrapy - Scrapyd:如何检索爬虫或 scrapyd 项目的版本?
- node.js - Gibrish 获取图像并发送给客户端时