Java 石头剪刀问题-只返回一半结果

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

我是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, 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的。