public static void determineWinner(String userLower, String comp) {
String user = userLower;
String computer = comp;
if(user.equals(computer)) {
System.out.println("It's a tie!");
} else if(user.equals("rock")) {
if(computer.equals("scissors")) {
System.out.println("You win!");
}
} else if(computer.equals("rock")) {
if(user.equals("scissors")) {
System.out.println("You lose!");
}
} else if(user.equals("scissors")) {
if(computer.equals("paper")){
System.out.println("You win!");
}
} else if(computer.equals("scissors")) {
if(user.equals("paper")) {
System.out.println("You lose");
}
} else if(user.equals("paper")) {
if(computer.equals("rock")) {
System.out.println("You Win!");
}
} else if(computer.equals("paper")) {
if(user.equals("rock")) {
System.out.println("You lose!");
}
}
答案 0 :(得分:2)
基本上,您正在测试每种可能的组合(除了平局)。使用石头剪刀,你有9种不同的结果,其中3种是领带,所以剩下6种。
现在想象一下,你必须为21世纪的变形“摇滚纸剪刀 - 蜥蜴 - Spock”做到这一点:25种不同的结果。这是一长串if else
s。
但是:所有可能的结果都可以存储到表中,并且该表可以根据需要小(或大)。此表适用于RPSLS(无法找到RPS),但原理相同:
您可以垂直选择您的选择并将计算机水平选择;然后,左边的数字是你的分数(很明显,1代表Win,-1代表Lose),右边的数字代表对手。
(编辑)这是Rock-Paper-Scissors表。每个组合不需要两个元素,另一个元素总是与显示的元素相反。该表显示列中的Winner,行中的Loser。
+----------+-------+-------+--------+
| | Rock | Paper |Scissors|
+----------+-------+-------+--------+
| Rock | 0 | 1 | -1 |
| Paper | -1 | 0 | 1 |
| Scissors | 1 | -1 | 0 |
+----------+-------+-------+--------+
答案 1 :(得分:1)
您必须为用户检查3个案例:他有摇滚,纸张或剪刀。对于每个操作,计算机将有2个选项(因为已经处理了平局),请参阅下面的代码
if(user.equals(computer)){
System.out.println("It's a tie!");
}
else if(user.equals("rock")){
if(computer.equals("scissors")){
System.out.println("You win!");
else if (computer.equals("paper"){
System.out.println("Computer wins!");
}
}
}else if(user.equals("scissors")){
if(computer.equals("paper")){
System.out.println("You win!");
else if (computer.equals("rock"){
System.out.println("Computer wins!");
}
}
}else if(user.equals("paper")){
if(computer.equals("rock")){
System.out.println("You Win!");
}
else if (computer.equals("scissors"){
System.out.println("Computer wins!");
}
}
答案 2 :(得分:1)
尝试在没有else if
语句的情况下进行评估,并使用简单的if
语句。
例如,假设为user="rock"
和computer!="scissors"
,则后面的第一个else if
语句为true,但第二个if
语句为false。因为下一个else if
语句与第一个else if
相关(这是真的),所以它不会被执行。
else if(user.equals("rock")){
if(computer.equals("scissors")){
System.out.println("You win!");
}
}else if(computer.equals("rock")){
if(user.equals("scissors")){
System.out.println("You lose!");
}
答案 3 :(得分:0)
使用else if
时,它是独占的。例如:
else if (user.equals("rock")){
if (computer.equals("scissors")) {
System.out.println("You win!");
}
}
想象一下,用户选择了"rock"
,但计算机选择了"paper"
。然后if / else构造将退出而不打印胜利者。
你需要重新思考你的逻辑!
答案 4 :(得分:0)
您需要else
条款来涵盖所有情况:
} else if(user.equals("rock")) {
if(computer.equals("scissors")) {
System.out.println("You win!");
} // There is no logic to handle user = "rock", computer != "sicssors"
} else if ...
您是打算写这个呢?
} else if(user.equals("rock") && computer.equals("scissors")) {
System.out.println("You win!");
} else if ...
您还可以为不同的项目分配数字,并执行简单的数学运算以确定获胜者:
Map<String, int> map = new HashMap<String, int>();
map.put("rock", 1);
map.put("paper", 2);
map.put("scissors", 3);
int user = map.get(userLower);
int computer = map.get(comp) % 3;
if(user %3 == computer) {
System.out.println("It's a tie!");
} else if(user == computer-1) {
System.out.println("You win!");
} else {
System.out.println("You lose!");
}
答案 5 :(得分:0)
试试这个。
if (user.equals (computer)) {
System.out.println ("It's a tie!");
} else if (user.equals ("rock")) {
if (computer.equals ("scissors")) {
System.out.println ("You win!");
} else if (computer.equals ("paper")) {
System.out.println ("You lose!");
}
} else if (user.equals ("scissors")) {
if (computer.equals ("rock")) {
System.out.println ("You lose!");
} else if (computer.equals ("paper")) {
System.out.println ("You win!");
}
} else if (user.equals ("paper")) {
if (computer.equals ("rock")) {
System.out.println ("You win!");
} else if (computer.equals ("scissors")) {
System.out.println ("You lose!");
}
}
答案 6 :(得分:0)
您无需在第一个if级别检查两个输入。 这应该适合你。
public static void determineWinner(String userLower, String comp) {
String user = userLower;
String computer = comp;
if(user.equals(computer)){
System.out.println("It's a tie!");
}
else if(user.equals("rock")){
if(computer.equals("scissors") || computer.equals("paper")){
System.out.println("You win!");
}
}else if(user.equals("scissors")){
if(computer.equals("paper")){
System.out.println("You win!");
}else if(computer.equals("rock")){
System.out.println("You lose!");
}
}else if(user.equals("paper")){
if(computer.equals("rock")){
System.out.println("You Win!");
}else if(computer.equals("scissor")){
System.out.println("You lose!");
}
}
}
答案 7 :(得分:0)
让我们为两个球员的行动定义得分:
Player + S is 1
Player + P is 2
Player + R is 4
//same actions of computer yeld negative score with same amounts
if (player.score() + AI.score() == 0)
return tie(); // both players did same action
if (player.score() + AI.score() == 1)
//S + P combination we need to check who plays S
return player.score() == 1 ? win() : lose()
if (player.score() + AI.score() == 2)
//P + R combination same check here
return player.score() == 2 ? win() : lose()
if (player.score() + AI.score() == 3)
//S + R combination same check here
return player.score() == 4 ? win() : lose()
使用ENUM或switchcase,这可以通过完全跳过某些检查来更加优化
添加
int [] scoretable = {1, 2, 4,
-2,-4,-1};
// R S P
//lose condition zero result
// R+P 1-1 = 0
// P+S 4-4 = 0
// S+R 2-2 = 0
//all other conditions are win or tie, tie checked before score calculated
允许在单线行动中检查胜利。