【问题标题】:How do i make an if statement have multiple strings?如何使 if 语句具有多个字符串?
【发布时间】:2015-10-18 15:11:24
【问题描述】:

我正在制作一个简单的石头剪刀布游戏,如果用户输入除了石头、纸、剪刀之外的其他单词,我想在那里做一个 if 语句,这表明选择无效,我尝试了“||”我也试过“&&”。

if(userChoice.equalsIgnoreCase("Scissors") && ("Paper") &&  ("rock")) {
    System.out.println("Invalid choice. Ending program.");

    // Exit program
    Main.main(args);
}

【问题讨论】:

    标签: java


    【解决方案1】:
    if(!(userChoice.equalsIgnoreCase("Scissors") || userChoice.equalsIgnoreCase("Paper") ||  userChoice.equalsIgnoreCase("rock")))
    {
        System.out.println("Invalid choice. Ending program.");
    
        // Exit program
        Main.main(args);
    }
    

    【讨论】:

      【解决方案2】:

      您可以使用正确选择的集合并检查用户选择是否在其中

      List<String> correctChoices = Arrays.asList("rock","paper","scissors");
      ...
      
      if (!correctChoice.contains(userChoice.toLowerCase()){
          //invalid input
      }
      

      要提高contains 方法的性能,您可以使用 HashSet 代替列表

      Set<String> correctChoices = new HashSet<>(Arrays.asList("rock","paper","scissors"));
      

      【讨论】:

        【解决方案3】:
        if(!userChoice.equalsIgnoreCase("Scissors") && !userChoice.equalsIgnoreCase("Paper") && !userChoice.equalsIgnoreCase("rock")) {
            System.out.println("Invalid choice. Ending program.");
        
            // Exit program
            Main.main(args);
        }
        

        &amp;&amp; ("Paper") 的语法无效,只允许布尔类型。您要检查的是选项不等于“剪刀”且不等于“纸”且不等于“岩石”。

        当然,这不是唯一的方法,因为您可以使用否定二进制逻辑将 true 与 false 以及 AND 与 OR。

        【讨论】:

          【解决方案4】:
          if(!(userChoice.equalsIgnoreCase("Scissors") || userChoice.equalsIgnoreCase("Paper") ||  userChoice.equalsIgnoreCase("rock"))
          

          【讨论】:

            【解决方案5】:

            一种简洁的方法是使用switch 语句。

            switch( userChoice.toLowerCase() ) {
               case "scissors":
               case "paper":
               case "rock":
                  // Continue
                  break; 
               default:
                  System.out.println("Invalid choice. Ending program.");
                  System.exit(1);
                  break;
            }
            

            【讨论】:

              【解决方案6】:

              这应该可以解决问题:

              if(!userChoice.equalsIgnoreCase("Scissors") && !userChoice.equalsIgnoreCase("Paper") && !userChoice.equalsIgnoreCase("rock"))
              {
                  System.out.println("Invalid choice. Ending program.");
              
                  // Exit program
                  Main.main(args);
              }
              

              在比较原始数据类型时使用!String_name.equalsIgnoreCase(String s)!= 相同,但显然不能在字符串上使用它,因为使用!= 您只需评估它们是否不是同一个对象,这总是错误的。

              【讨论】:

                【解决方案7】:
                Enum Possibilities {
                    ROCK,
                    PAPER,
                    SCISSORS;
                
                    public static boolean isInPossibilities(String input) {
                        for (Possibilities possibilitie: values()) {
                            if (possibilitie.name().equalsIgnoreCase(input)) {
                                return true;
                            }
                        }
                        return false
                    }
                }
                

                然后像这样进行检查:

                if(Possibilities.isInPossibilities("paper")) {
                    ....
                }
                

                这是您特定代码的解决方案。但是对于最适合标题的答案,您可以使用 Porz 答案。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 2014-03-02
                  • 1970-01-01
                  • 2014-10-20
                  相关资源
                  最近更新 更多