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(“纸”)