【问题标题】:Rock Paper Scissors question - only half return a result剪刀石头布问题 - 只有一半返回结果
【发布时间】:2019-06-28 19:38:15
【问题描述】:

我是 Java 新手,我的任务是使用嵌套的 if 语句编写一个两人摇滚/纸/剪刀游戏。我的结果只有一半是打印结果

当我使用 "else if ("rock".equals(player1) && "paper".equals(player2))" 而不是嵌套的 if 语句时,该程序适用于所有组合,但嵌套 ifs 是专栏。

    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();
    }

 }

我希望每个输入组合都有一个输出,但剪刀与石头、石头与剪刀、纸与石头不会向控制台输出任何输出。

【问题讨论】:

  • 你有两次else if ("paper".equals(player1)),不会输入两次,只会输入第一次。您需要将嵌套的if 移动到第一个else if ("paper".equals(player1))

标签: java


【解决方案1】:
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... 将被跳过。要解决这个问题,只需在一个块中对 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 语句,它可以为问题提供替代解决方案。

【讨论】:

  • 虽然我觉得换个开关会更好。
  • @ScaryWombat 好点。我的建议是直接使用来自 OP 的代码,但建议替代方案也很好。
  • @Code-Apprentice 完全同意。
  • 本场比赛的第二个作业是switch。这个是专门使用嵌套 ifs 的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多