Java 石头剪刀问题-只返回一半结果
我是Java新手,任务是使用嵌套的if语句编写一个两人玩的石头/布/剪刀游戏。我的成果只有一半是打印结果 当我使用“else-if”(“rock.equals(player1)&&“paper.equals(player2))”而不是嵌套的if语句时,该程序可以处理所有组合,但嵌套的if是规则的一部分Java 石头剪刀问题-只返回一半结果,java,Java,我是Java新手,任务是使用嵌套的if语句编写一个两人玩的石头/布/剪刀游戏。我的成果只有一半是打印结果 当我使用“else-if”(“rock.equals(player1)&&“paper.equals(player2))”而不是嵌套的if语句时,该程序可以处理所有组合,但嵌套的if是规则的一部分 Scanner in = new Scanner(System.in); System.out.print("Player 1, please choose rock, pape
Scanner in = new Scanner(System.in);
System.out.print("Player 1, please choose rock, paper, or scissors: ");
String player1 = in.next();
System.out.print("Player 2, please choose rock, paper, or scissors: ");
String player2 = in.next();
player1 = player1.toLowerCase();
player2 = player2.toLowerCase();
if (player1.equals(player2))
{
System.out.println("It's a tie!");
}
else if ("rock".equals(player1))
{
if ("paper".equals(player2))
{
System.out.println("Paper covers rock - Player 2 wins!");
}
}
else if ("rock".equals(player1))
{
if ("scissors".equals(player2))
{
System.out.println("Rock breaks scissors - Player 1 wins!");
}
}
else if ("paper".equals(player1))
{
if ("scissors".equals(player2))
{
System.out.println("Scissors cut paper - Player 2 wins!");
}
}
else if ("paper".equals(player1))
{
if ("rock".equals(player2))
{
System.out.println("Paper covers rock - Player 1 wins!");
}
}
else if ("scissors".equals(player1))
{
if ("paper".equals(player2))
{
System.out.println("Scissors cut paper - Player 1 wins!");
}
}
else if ("scissors".equals(player1))
{
if ("rock".equals(player2))
{
System.out.println("Rock breaks scissors - Player 2 wins!");
}
}
else
{
System.out.println("Invalid input. Please try again using rock, paper, or scissors");
}
in.close();
}
}
我希望每个输入组合都有一个输出,但是剪刀vs石头、石头vs剪刀、纸vs石头不会向控制台产生任何输出
else if ("rock".equals(player1))
{
if ("paper".equals(player2))
{
System.out.println("Paper covers rock - Player 2 wins!");
}
}
else if ("rock".equals(player1))
{
if ("scissors".equals(player2))
{
System.out.println("Rock breaks scissors - Player 1 wins!");
}
}
请注意,您有两次相同的检查。当第一个为true时,将只执行该块,并跳过下一个else if…
。要解决此问题,只需在一个块中执行player2的所有检查:
else if ("rock".equals(player1))
{
if ("paper".equals(player2))
{
System.out.println("Paper covers rock - Player 2 wins!");
}
else if ("scissors".equals(player2))
{
System.out.println("Rock breaks scissors - Player 1 wins!");
}
}
您还应该了解switch
语句,该语句可以提供问题的替代解决方案
请注意,您有两次相同的检查。当第一个为true时,将只执行该块,并跳过下一个else if…
。要解决此问题,只需在一个块中执行player2的所有检查:
else if ("rock".equals(player1))
{
if ("paper".equals(player2))
{
System.out.println("Paper covers rock - Player 2 wins!");
}
else if ("scissors".equals(player2))
{
System.out.println("Rock breaks scissors - Player 1 wins!");
}
}
您还应该了解
switch
语句,它可以提供问题的替代解决方案。您有else if(“paper.equals(player1))
两次,并且不会输入两次,只会输入第一次。您需要将嵌套的if
移动到第一个else if(“paper.equals(player1))
下,您有else if(“paper.equals(player1))
两次,不会输入两次,只会输入第一个。您需要将嵌套的if
移动到第一个else if(“paper.equals(player1))
下,尽管我认为切换会更好。@ScaryWombat说得不错。我在这里的建议是直接使用OP中的代码,但建议替代方案也很好。@code学徒完全同意。这个游戏的第二个任务包括切换。这一个是专门使用嵌套ifs的。虽然我认为切换会更好。@ScaryWombat很好。我在这里的建议是直接使用OP中的代码,但建议替代方案也很好。@code学徒完全同意。这个游戏的第二个任务包括切换。这一个是专门使用嵌套ifs的。