首页 > 解决方案 > Java:如何在 main 函数中使用 Enum 类型的变量?

问题描述

我正在尝试使用变量类型Level(枚举)作为我的参数来打印特定的语句。当我运行打印语句时System.out.println(whatLevel(HARD)),我得到一个错误。我怎样才能使这项工作?

public class GamesLevels{
    enum Level{EASY,MODERATE,HARD}
 
    public String whatLevel(Level level){
        Sring myAns = "";
   
        if (level == Level.EASY) {
            myAns = "welcome to the game";
        }
        else if (level == Level.MODERATE) {
            myAns = "Wow, you leveled up!";
        }
        else if (level == Level.HARD) {
            myAns = "Nice, we have a Pro!";
        }
 
        return myAns; 
  }
 
  public static void main(String[] args) {  
      System.out.println(whatLevel(HARD));
  }
 
}

标签: javaenums

解决方案


您还可以将每个枚举的描述合并到声明中:

public class GamesLevels {

    enum Level {
        EASY("welcome to the game"),
        MODERATE("Wow, you leveled up!"),
        HARD("Nice, we have a Pro!");

        private String desc;

        Level(String desc) {
            this.desc = desc;
        }

        String getDescription() {
            return desc;
        }
    }

    public static void main(String[] args ) {
        System.out.println(Level.HARD.getDescription());
    }
}

这样做的好处是,如果您稍后添加一个级别,它不会在不添加描述的情况下编译,而 whatLevel 将按原样工作并且不打印任何内容。

或更短的版本:

public class GamesLevels {

    enum Level { EASY, MODERATE, HARD };

    private static Map<Level,String> descriptions = Map.of(
            Level.EASY,     "welcome to the game",
            Level.MODERATE, "Wow, you leveled up!",
            Level.HARD,     "Nice, we have a Pro!");

    public static void main(String[] args ) {
        System.out.println(descriptions.getOrDefault(Level.HARD, "UNKNOWN"));
    }
}

推荐阅读