记录用户输入以影响 if 语句 java
Recording user input to affect if statement java
我想知道我将如何处理这件事。我想让每次用户输入 "paper" 它都会添加一个计数,当计数为 3 及以上时,计算机会为下一个选择剪刀。我的代码在这里,我想知道我是否在朝着正确的方向前进。
double PC = Math.random();
String User = UI.askString("Enter choice: ");
int paper = 0;
paper ++;
int finalCount = 0;
UI.clearGraphics();
if(PC < 0.3333 || paper > 3){
UI.drawImage("scissors-left.jpg", 100, 100);
UI.drawString("PC chose scissors", 100, 90);
if(User.equalsIgnoreCase("rock")){
UI.drawImage("rock-right.jpg", 300, 100);
UI.drawString("you win", 300, 90);
finalCount = finalCount + 1;
}
if(User.equalsIgnoreCase("scissors")){
UI.drawImage("scissors-right.jpg", 300, 100);
UI.drawString("tie", 300, 90);
finalCount = finalCount + 0;
}
if(User.equalsIgnoreCase("paper")){
UI.drawImage("paper-right.jpg", 300, 100);
UI.drawString("you lose", 300, 90);
finalCount = finalCount - 1;
paper ++;
}
}
else if(PC > 0.667){
UI.drawImage("rock-left.jpg", 100, 100);
UI.drawString("PC chose rock", 100, 90);
if(User.equalsIgnoreCase("rock")){
UI.drawImage("rock-right.jpg", 300, 100);
UI.drawString("tie", 300, 90);
finalCount = finalCount + 0;
}
if(User.equalsIgnoreCase("scissors")){
UI.drawImage("scissors-right.jpg", 300, 100);
UI.drawString("you lose", 300, 90);
finalCount = finalCount - 1;
}
if(User.equalsIgnoreCase("paper")){
UI.drawImage("paper-right.jpg", 300, 100);
UI.drawString("you win", 300, 90);
finalCount = finalCount + 1;
paper++;
}
}
else{
UI.drawImage("paper-left.jpg", 100, 100);
UI.drawString("PC chose paper", 100, 90);
if(User.equalsIgnoreCase("rock")){
UI.drawImage("rock-right.jpg", 300, 100);
UI.drawString("you lose", 300, 90);
finalCount = finalCount - 1;
}
if(User.equalsIgnoreCase("scissors")){
UI.drawImage("scissors-right.jpg", 300, 100);
UI.drawString("you win", 300, 90);
finalCount = finalCount + 1;
}
if(User.equalsIgnoreCase("paper")){
UI.drawImage("paper-right.jpg", 300, 100);
UI.drawString("tie", 300, 90);
finalCount = finalCount + 0;
paper ++;
}
}
return finalCount;
}
谢谢:)
你的程序中有很多重复的代码。当你有这么多重复时,你应该寻找避免重复的方法。
例如,您测试 User
是否等于 "rock"
,如果为真,则绘制 "rock-right.jpg"
。但是无论 PC
是什么,这个测试和绘制图像的代码都是一样的。所以你可以把它从 if
的那个测试 PC
中移出来,并在你说 if (PC < 0.3333 || paper > 3)
:
之前做一次
if(User.equalsIgnoreCase("rock")){
UI.drawImage("rock-right.jpg", 300, 100);
}
else if (User.equalsIgnoreCase("scissors")) {
UI.drawImage("scissors-right.jpg", 300, 100);
}
else if (User.equalsIgnoreCase("paper")) {
UI.drawImage("paper-right.jpg", 300, 100);
}
然后您可能会发现您甚至不需要 if
语句,因为您每次都使用几乎相同的参数重复 drawImage
:
UI.drawImage(User.toLowerCase() + "-right.jpg", 300, 100);
因此 9 drawImage
次调用已减少到 1 次。
你可以做的另一件事是不要使用那么多 if
来检查剪刀石头布的每个组合。假设我们将每个字符串翻译成一个数字,rock=0,paper=1,scissors=2。这里 table 显示每个组合的获胜者:
PC \ User | rock=0 | paper=1 | scissors=2
rock=0 | Tie | User | PC
paper=1 | PC | Tie | User
scissors=2 | User | PC | Tie
请注意,行遵循一种模式:当您转到下一行时,"winner" 值向右旋转一个位置(右边的值移到左边),并且这种模式一直持续下去(好的,只有一行)。但每当您看到这种模式时,您都应该考虑使用 %
(取模)运算符来找到答案。在这种情况下,它将像这样工作:
if (PC == User)
it's a tie
else if ((PC + 1) % 3 == User)
the user wins
else
the PC wins
这适用于所有 9 种组合,这应该大大简化您的代码,而不是嵌套 if
语句的 9 种组合。
我想知道我将如何处理这件事。我想让每次用户输入 "paper" 它都会添加一个计数,当计数为 3 及以上时,计算机会为下一个选择剪刀。我的代码在这里,我想知道我是否在朝着正确的方向前进。
double PC = Math.random();
String User = UI.askString("Enter choice: ");
int paper = 0;
paper ++;
int finalCount = 0;
UI.clearGraphics();
if(PC < 0.3333 || paper > 3){
UI.drawImage("scissors-left.jpg", 100, 100);
UI.drawString("PC chose scissors", 100, 90);
if(User.equalsIgnoreCase("rock")){
UI.drawImage("rock-right.jpg", 300, 100);
UI.drawString("you win", 300, 90);
finalCount = finalCount + 1;
}
if(User.equalsIgnoreCase("scissors")){
UI.drawImage("scissors-right.jpg", 300, 100);
UI.drawString("tie", 300, 90);
finalCount = finalCount + 0;
}
if(User.equalsIgnoreCase("paper")){
UI.drawImage("paper-right.jpg", 300, 100);
UI.drawString("you lose", 300, 90);
finalCount = finalCount - 1;
paper ++;
}
}
else if(PC > 0.667){
UI.drawImage("rock-left.jpg", 100, 100);
UI.drawString("PC chose rock", 100, 90);
if(User.equalsIgnoreCase("rock")){
UI.drawImage("rock-right.jpg", 300, 100);
UI.drawString("tie", 300, 90);
finalCount = finalCount + 0;
}
if(User.equalsIgnoreCase("scissors")){
UI.drawImage("scissors-right.jpg", 300, 100);
UI.drawString("you lose", 300, 90);
finalCount = finalCount - 1;
}
if(User.equalsIgnoreCase("paper")){
UI.drawImage("paper-right.jpg", 300, 100);
UI.drawString("you win", 300, 90);
finalCount = finalCount + 1;
paper++;
}
}
else{
UI.drawImage("paper-left.jpg", 100, 100);
UI.drawString("PC chose paper", 100, 90);
if(User.equalsIgnoreCase("rock")){
UI.drawImage("rock-right.jpg", 300, 100);
UI.drawString("you lose", 300, 90);
finalCount = finalCount - 1;
}
if(User.equalsIgnoreCase("scissors")){
UI.drawImage("scissors-right.jpg", 300, 100);
UI.drawString("you win", 300, 90);
finalCount = finalCount + 1;
}
if(User.equalsIgnoreCase("paper")){
UI.drawImage("paper-right.jpg", 300, 100);
UI.drawString("tie", 300, 90);
finalCount = finalCount + 0;
paper ++;
}
}
return finalCount;
}
谢谢:)
你的程序中有很多重复的代码。当你有这么多重复时,你应该寻找避免重复的方法。
例如,您测试 User
是否等于 "rock"
,如果为真,则绘制 "rock-right.jpg"
。但是无论 PC
是什么,这个测试和绘制图像的代码都是一样的。所以你可以把它从 if
的那个测试 PC
中移出来,并在你说 if (PC < 0.3333 || paper > 3)
:
if(User.equalsIgnoreCase("rock")){
UI.drawImage("rock-right.jpg", 300, 100);
}
else if (User.equalsIgnoreCase("scissors")) {
UI.drawImage("scissors-right.jpg", 300, 100);
}
else if (User.equalsIgnoreCase("paper")) {
UI.drawImage("paper-right.jpg", 300, 100);
}
然后您可能会发现您甚至不需要 if
语句,因为您每次都使用几乎相同的参数重复 drawImage
:
UI.drawImage(User.toLowerCase() + "-right.jpg", 300, 100);
因此 9 drawImage
次调用已减少到 1 次。
你可以做的另一件事是不要使用那么多 if
来检查剪刀石头布的每个组合。假设我们将每个字符串翻译成一个数字,rock=0,paper=1,scissors=2。这里 table 显示每个组合的获胜者:
PC \ User | rock=0 | paper=1 | scissors=2
rock=0 | Tie | User | PC
paper=1 | PC | Tie | User
scissors=2 | User | PC | Tie
请注意,行遵循一种模式:当您转到下一行时,"winner" 值向右旋转一个位置(右边的值移到左边),并且这种模式一直持续下去(好的,只有一行)。但每当您看到这种模式时,您都应该考虑使用 %
(取模)运算符来找到答案。在这种情况下,它将像这样工作:
if (PC == User)
it's a tie
else if ((PC + 1) % 3 == User)
the user wins
else
the PC wins
这适用于所有 9 种组合,这应该大大简化您的代码,而不是嵌套 if
语句的 9 种组合。