记录用户输入以影响if语句java



我想知道该怎么做。我想让用户每次输入"纸张"时都会添加一个计数,当计数为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是什么,这个测试和绘制图像的代码都是一样的。所以你可以把它从测试PCif中移出来,在说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来检查石头、纸、剪刀的每种组合。假设我们将每条绳子翻译成一个数字,岩石=0,纸=1,剪刀=2。以下表格显示了每个组合的获胜者:

PC      User |  rock=0  |  paper=1  | scissors=2
rock=0        |   Tie    |   User    |   PC
paper=1       |   PC     |   Tie     |   User
scissors=2    |   User   |   PC      |   Tie

请注意,行遵循一种模式:当您转到下一行时,"赢家"值向右旋转一个位置(右侧的值向左移动),并且这种模式一直向下延续(好吧,只多了一行)。但是,每当您看到这种模式时,都应该考虑使用%(模)运算符来找到答案。在这种情况下,它将像这样工作:

if (PC == User)
it's a tie
else if ((PC + 1) % 3 == User)
the user wins
else
the PC wins

这适用于所有9个组合,这将大大简化代码,而不是使用嵌套的if语句的9个组合。

相关内容

  • 没有找到相关文章

最新更新