Java 确定岩石纸剪刀游戏的赢家

Java 确定岩石纸剪刀游戏的赢家,java,methods,Java,Methods,在这个石头剪纸游戏中,我需要一种不同的方法来决定胜利者。当我运行我的程序时,其余的运行平稳,但我不会显示一个获胜者。我认为它们可能是我代码中的逻辑错误 public static void determineWinner(String userLower, String comp) { String user = userLower; String computer = comp; if(user.equals(computer)) {

在这个石头剪纸游戏中,我需要一种不同的方法来决定胜利者。当我运行我的程序时,其余的运行平稳,但我不会显示一个获胜者。我认为它们可能是我代码中的逻辑错误

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!");
            }    
      }       

当您使用
else if
时,它是独占的。例如:

else if (user.equals("rock")){
   if (computer.equals("scissors")) {
      System.out.println("You win!");
   }
}
假设用户选择了
“摇滚”
,而计算机选择了
“纸张”
。然后if/else构造将退出,而不打印赢家


你需要重新思考你的逻辑

当您使用
else时,如果它是独占的。例如:

else if (user.equals("rock")){
   if (computer.equals("scissors")) {
      System.out.println("You win!");
   }
}
假设用户选择了
“摇滚”
,而计算机选择了
“纸张”
。然后if/else构造将退出,而不打印赢家


你需要重新思考你的逻辑

您需要
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!");
}
Map Map=newhashmap();
地图.put("岩石",1);;
地图.字迹("纸",2);;
地图。放置(“剪刀”,3);
int user=map.get(userLower);
int computer=map.get(comp)%3;
如果(用户%3==计算机){
System.out.println(“打成平局了!”);
}else if(用户==计算机-1){
System.out.println(“你赢了!”);
}否则{
System.out.println(“你输了!”);
}

您需要
其他
条款来涵盖所有场景:

 } 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!");
}
Map Map=newhashmap();
地图.put("岩石",1);;
地图.字迹("纸",2);;
地图。放置(“剪刀”,3);
int user=map.get(userLower);
int computer=map.get(comp)%3;
如果(用户%3==计算机){
System.out.println(“打成平局了!”);
}else if(用户==计算机-1){
System.out.println(“你赢了!”);
}否则{
System.out.println(“你输了!”);
}

您必须为用户检查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!");
                }
            }

您必须为用户检查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!");
                }
            }

尝试在不使用
else if
语句的情况下进行求值,并使用简单的
if
语句

例如,让我们假设
user=“rock”
计算机=“剪刀”
,则以下第一个
如果
语句为true,则为else,但第二个
如果
语句为false。因为下一个
elseif
语句与第一个
elseif
语句相关(这是真的),所以它不会被执行

                 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
语句的情况下进行求值,并使用简单的
if
语句

例如,让我们假设
user=“rock”
计算机=“剪刀”
,则以下第一个
如果
语句为true,则为else,但第二个
如果
语句为false。因为下一个
elseif
语句与第一个
elseif
语句相关(这是真的),所以它不会被执行

                 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!");


                    }
试试这个

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!");
    }
}
试试这个

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!");
    }
}

您不需要在第一个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!");
    }
}

}

您无需在第一个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!");
    }
}

}

基本上,您正在测试每种可能的组合(领带除外)。用石头剪刀,你有9种不同的结果,其中3种是平局,所以还有6种

现在想象一下,你必须为21世纪的变种“石头剪纸蜥蜴斯波克”这样做:25种不同的结果。这是一个很长的
if-else
s列表

但是:所有可能的结果都可以存储到一个表中,该表可以是您想要的大小。此表用于RPSLS(找不到RPS),但原理相同:

你可以垂直选择,水平选择电脑;然后,左边的数字是你的分数(显然,1代表赢,-1代表输),右边的数字是对手


(编辑)这是放剪刀的桌子。每个组合不需要两个元素,另一个元素总是与显示的相反。该表在列中显示赢家,在行中显示输家

+----------+-------+-------+--------+
|          | Rock  | Paper |Scissors|
+----------+-------+-------+--------+
| Rock     |   0   |   1   |   -1   |
| Paper    |  -1   |   0   |    1   |
| Scissors |   1   |  -1   |    0   |
+----------+-------+-------+--------+

基本上,您正在测试每种可能的组合(领带除外)。用石头剪刀,你有9种不同的结果,其中3种是平局,所以还有6种

现在想象一下,你必须为21世纪的变种“石头剪纸蜥蜴斯波克”这样做:25种不同的结果。这是一个很长的
if-else
s列表

但是:所有可能的结果都可以存储到一个表中,该表可以是您想要的大小。此表用于RPSLS(找不到RPS),但原理相同:

你可以垂直选择,水平选择电脑;然后,左边的数字是你的分数(显然,1代表赢,-1代表输),右边的数字是对手


(编辑)这是放剪刀的桌子。每个组合不需要两个元素,另一个元素总是与显示的相反。该表在列中显示赢家,在行中显示输家

+----------+-------+-------+--------+
|          | Rock  | Paper |Scissors|
+----------+-------+-------+--------+
| Rock     |   0   |   1   |   -1   |
| Paper    |  -1   |   0   |    1   |
| Scissors |   1   |  -1   |    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,可以通过完全跳过某些检查来实现更优化的效果


允许在单行操作中检查是否获胜。

允许定义两个玩家操作的分数:

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,可以通过完全跳过某些检查来实现更优化的效果


允许在单行操作中检查是否赢。

使用类似以下的语句
else if(computer.equals(“剪刀”)&user.equals(“纸”)