Java执行的循环在工作不正常时执行
对不起,我是这个网站的新手,所以不确定这将如何显示。我想做一个简单的石头,布,剪刀游戏。在while
语句之后,如果没有输入R,P,S,则程序什么也不做。我想让它回到问题的开头,这样就可以做出正确的选择。另外,如何输入打印语句,如“无效选择请重试”
package rps.gameapp;
import java.util.Scanner;
public class RPSGameApp
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String userChoice;
String playAgain;
int randNum = (int) (Math.random() * 3);
do
{
System.out.println("Welcome to Rock, Paper, Scissors Game.");
System.out.println("Pick R, P, or S.");
userChoice = sc.nextLine();
while (!userChoice.equalsIgnoreCase("P")
&& !userChoice.equalsIgnoreCase("R")
&& !userChoice.equalsIgnoreCase("S"));
String compChoice = "";
switch (randNum)
{
case 0:
compChoice = "R";
break;
case 1:
compChoice = "P";
break;
case 2:
compChoice = "S";
break;
}
System.out.println("The computer entered \"" + compChoice + "\".");
if (compChoice.equalsIgnoreCase(userChoice))
{
System.out.println("Draw");
} else if (userChoice.equalsIgnoreCase(userChoice)
&& compChoice.equalsIgnoreCase("S")
|| userChoice.equalsIgnoreCase("P")
&& compChoice.equalsIgnoreCase("R")
|| userChoice.equalsIgnoreCase("S")
&& compChoice.equalsIgnoreCase("P"))
{
System.out.println("User Wins");
} else
{
System.out.println("User Loses");
}
System.out.print(
"Do you want to play again? (Y/N)");
playAgain = sc.nextLine();
} while (playAgain.equalsIgnoreCase("Y"));
System.out.println("Thanks for Playing!");
}
}
# 1 楼答案
看起来你忘记了一个}循环
do
作为你的内部do
{应该是:
如果没有内部
do
(以及环绕该循环体的花括号),内部循环将变成一个带有空体的while
循环# 2 楼答案
正如Eran所说,您需要将do while循环包装到另一个循环中,这将不断要求用户输入正确的内容。这是完全有效的代码。一件可能更好的事情是用户输入错误的字母后的消息
编辑:还要确保每次迭代都画出随机数
编辑2:要根据用户输入更改消息,可以引入一个新变量,该变量将跟踪您请求用户正确输入的次数。如果为0,则表示第一次询问用户,我们应该打印“欢迎”消息。它不是0-您需要向用户请求正确的输入。在每一轮之后,我们再次给变量赋值零,循环重复。我已经在代码中实现了这个更改。请注意,此变量也可以是布尔值