if语句montyhall允许使用更简单的运算符和函数在JAVA中进行交易
因此,我已经在这项任务上工作了大约12个小时,但未能涵盖所有参数。我被要求制作一个基于Monty Hall“Lets make a deal”的程序,并要求检查每个用户输入的有效性,直到切换门
我有以下问题:
如果用户想在zonk显示后切换门,他们会被带回到主菜单,要求他们选择一扇门。然后放入一个连续的输入循环
如果用户的输入在开关门场景中无效,则会出现与上述相同的问题
显示获胜百分比时出现问题
想再次玩游戏时出现问题
请帮助,这是一个初学者,所以在代码的所有部分都非常欢迎批评
System.out.println("WELCOME TO 'LETS MAKE A DEAL'");
System.out.println("Please Enter 'A' to Play, 'B' To Watch, or 'Q' To Quit");
Scanner input = new Scanner (System.in);
String choice = input.next();
boolean done = false;
double wins = 0;
double loses = 0;
double games = 0;
while (!done)
{
if(choice.equals("A"))
{
System.out.println("Please Choose a door:\n");
System.out.println("[1] [2] [3]\n");
System.out.println("Type '1', '2', or '3'");
if(input.hasNextInt())
{
int chosenDoor = input.nextInt();
if(chosenDoor <= 3 && chosenDoor > 0)
{
int prizeIs = (int) ((Math.random() * 3) + 1);
int finChoice = 0;
int zonkIs = 0;
while (prizeIs == chosenDoor)
{
zonkIs = (int) ((Math.random() * 3) + 1);
while (zonkIs == prizeIs)
{
zonkIs = (int) ((Math.random() * 3) + 1);
}
}
if (prizeIs == 1 && chosenDoor == 2)
{
zonkIs = 3;
}
else if (prizeIs == 1 && chosenDoor == 3 )
{
zonkIs = 2;
}
else if (prizeIs == 2 && chosenDoor == 1 )
{
zonkIs = 3;
}
else if (prizeIs == 2 && chosenDoor == 3 )
{
zonkIs = 1;
}
else if (prizeIs == 3 && chosenDoor == 1 )
{
zonkIs = 2;
}
else if (prizeIs == 3 && chosenDoor == 2 )
{
zonkIs = 1;
}
System.out.println("\nI Will Now Reveal A Zonk\n\nDoor [" + zonkIs + "]");
System.out.println("\nKnowing This, Would You Like To Switch Doors? ('Y' or 'N') ");
String decision = input.next();
if(decision.equals("Y"))
{
System.out.println("Pick A New Door (Not The One With A Zonk)");
chosenDoor = input.nextInt();
finChoice = chosenDoor;
System.out.println("\nWell Then\n\nThe Moment You've Been Waiting For\n");
System.out.println("The Prize is in\n\nDoor [" + prizeIs + "]");
if (prizeIs == finChoice || prizeIs == chosenDoor)
{
System.out.println("\nCONGRATUALTIONS!!!\nYOU WON!!!!!");
wins++;
games++;
}
else
{
System.out.println("\n..Sorry, You Lost.");
loses++;
games++;
}
System.out.println("\nWould You Like To Play Again? ('Y' or 'N')");
decision = input.next();
if(decision.equals("N"))
{
System.out.println("\nWell Thanks For Playing\nYour Win Percentage was ");
if(wins <= 0.0 || wins < loses)
{
double percentage = 0;
System.out.printf(percentage +"%");
}
else
{
double percentage = (wins-loses)/games * 100;
System.out.printf("%5.2f", percentage +"%");
}
done = true;
input.close();
}
else if(decision.equals("Y"))
{
System.out.println("*******************************");
}
else
{
System.out.println("Invalid Entry, Please Try Again ('Y' or 'N')");
}
}
else if(decision.equals("N"))
{
finChoice = chosenDoor;
System.out.println("\nWell Then\n\nThe Moment You've Been Waiting For\n");
System.out.println("The Prize is in\n\nDoor [" + prizeIs + "]");
if (prizeIs == finChoice || prizeIs == chosenDoor)
{
System.out.println("\nCONGRATUALTIONS!!!\nYOU WON!!!!!");
wins++;
games++;
}
else
{
System.out.println("\n..Sorry, You Lost.");
loses++;
games++;
}
System.out.println("\nWould You Like To Play Again? ('Y' or 'N')");
decision = input.next();
if(decision.equals("N"))
{
System.out.println("\nWell Thanks For Playing\nYour Win Percentage was ");
if(wins <= 0.0 || wins < loses)
{
double percentage = 0;
System.out.printf(percentage +"%");
}
else
{
double percentage = (wins-loses)/games * 100;
System.out.printf("%5.2f", percentage +"%");
}
done = true;
input.close();
}
else if(decision.equals("Y"))
{
System.out.println("*******************************");
}
else
{
System.out.println("Invalid Entry, Please Try Again ('Y' or 'N')");
}
}
else
{
System.out.println("Invalid Entry, Please Try Again ('Y' or 'N')");
}
}
else
{
System.out.println("Invalid Entry, Please Try Again.");
}
}
else
{
System.out.println("Invalid Entry, Please Try Again.");
input.next();
}
}
else if(choice.equals("B"))
{
}
else if(choice.equals("Q"))
{
done = true;
input.close();
}
else
{
System.out.println("Invalid Entry, Please Try Again..");
choice = input.next();
}
}
}
}
# 1 楼答案
首先,这部分代码毫无意义:
这里的外部while循环,因为您既不改变
prizeIs
也不改变chosenDoor
内部,将是一个无止境的循环此外,从三个门中选择Zonk也没有意义,因为在我们有一个
prizeIs
之后,只有两个Zonk,它们是其他的门。我想最好使用集合或数组洗牌,但如果不允许,可以列出各种可能性然后这个
if
:成为上述
if
的else if
接下来,你对这个游戏有点误解。现在zonk已经被揭露,只有两扇门被遮住了。如果用户选择切换,他不应该从三个门中选择一个新门。一个是已知的zonk,另一个是已知的他先前的选择,他选择放弃。因此,当用户想要切换时,您只需将
chosenDoor
更改为未打开的门chosenDoor
切换到第二个zonk。因此,如果prizeIs是1,chosenDoor
也是,并且zonkIs
是2,那么就改变chosenDoor = 3
。如果zonkIs
是3,则执行chosenDoor = 2
李>chosenDoor = prizeIs
-因为用户选择了一个zonk,而您显示了另一个zonk,所以剩下的唯一一个是奖品门李>因此,在这种情况下不需要用户输入
因此,您需要更改大的
if-else
。如果用户选择切换,您将进行计算。这个if
没有else
,因为当用户没有说“是”时,他的意思是保留他原来的选择。此时,检查chosenDoor == prizeIs
,并计算百分比计算
首先,您只需要保留两个变量。比如赢和输,或者赢和游戏,或者输和游戏。你总是可以把输赢算作比赛的胜利
所以一定要做{},不要做任何损失,当玩家赢的时候做{}
现在计算成功百分比不需要那些
if
s.wins
不能小于零。它也不能大于games
但重要的是要记住,如果你把一个整数除以一个整数,你将得到整数除法。也就是说,
5/10
给出的是零,而不是0.5
,因为它不是整数因此,在除法之前,将其中一个数字转换为双精度是很重要的。一种简单的方法是将100更改为100.0,并将其移到开头:
这样,
100.0 * wins
会自动将wins
的值转换为double
。因此,当其结果被games
除时,games
的值也被转换为double
,并且不存在整数除