从枚举 Java 中获取值

问题描述

我有一个枚举定义如下。

public enum AgeRange {
    YOUNG(10,15),ADULT(20,50);

    private final int value;

    private AgeRange (int value) {
        this.value = value
    }

    public int getValue() {
        return value;
    }
}

我想要一个显示如下的结果:

  1. 如果我要求年轻,那么它会显示一个 10 到 15 岁之间的年轻人。
  2. 如果我要求成人,那么我会得到一个 20 到 50 岁之间的成人

如何要求用户输入一个整数值而不是一个字符串(使用 java.util.Scanner)并通过 main 函数中的 system.out.println 返回结果

解决方法

首先,您的枚举无法编译。您的构造函数采用一个参数,但您使用两个参数调用它。把它改成这样:

public enum AgeRange {
    YOUNG(10,15),ADULT(20,50);

    private final int from;
    private final int to;

    private AgeRange (int from,int to) {
        this.from = from;
        this.to = to;
    }

    public int getFrom() {
        return from;
    }
    public int getTo() {
        return from;
    }
}
  • 现在,询问您的用户的年龄。
  • 循环遍历 AgeRange.values()
  • 对于每个范围,将年龄与 range.getFrom() 和 range.getTo() 进行比较
  • 找到正确的范围后,返回它
  • 请注意,年龄可能不在您提供的范围组中。那你打算怎么办?
,

使用两个参数和一个方法创建一个构造函数,该方法接受一个字符串并在定义时显示范围的边界:

public enum AgeRange {
    YOUNG(10,50);

    private final int from;
    private final int to;
    
    private AgeRange (int from,int to) {
        this.from = from;
        this.to = to;
    }

    public int getFrom() {
        return from;
    }

    public int getTo() {
        return to;
    }
    
    public static void displayRangeBoundaries(String str) {
        for (AgeRange range : AgeRange.values()) {
            if (str.toUpperCase().equals(range.toString())) {
                System.out.println(range.toString() + " is between " + 
                        range.getFrom() + " and " + range.getTo() +
                        " years old."
                );
                return;
            }
        }
        System.out.println("No range found for: " + str);
    }
}

并像这样使用它:

public static void main(String[] args)  {
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter a range term");
    String input = scan.nextLine(); 
    
    AgeRange.displayRangeBoundaries(input);        
}