java - Java 中 int 转换为 enum

标签 java enums enumeration

我正在为类(class)作业编写一个多项式计算器,并且我想在 switch case 中使用枚举。

这是我写的枚举方法:

enum Options{
    ADDITION(1),
    MULTIPLICATION(2),
    EVALUATION(3),
    DERIVIATE(4),
    EXIT(5);

    public final int value;

     Options(int value){
         this.value = value;
     }

     public int getValue() {
         return value;
     }

     public static Options convert(int n) {
         for(Options o : values())
             if(o.getValue() == n)
                 return o;
         return null;
     }

}

程序中的这个开关案例:

choice = mysc.nextInt();
Options o = Options.convert(choice);
switch(o)
{
    case ADDITION: Add(isRational);break;
    case MULTIPLICATION: Mul(isRational);break;
    case EVALUATION: Evaluate(isRational);break;
    case DERIVIATE: Derivative(isRational);break;
    case EXIT: break;
}

我想在 switch case 中使用枚举,但我希望用户的输入是 int,因为这是分配的要求。

我想将从用户那里获得的 int 转换为相应的枚举,并在 switch case 中使用它。

有没有一种方法可以将其转换为正确的枚举而不使用枚举内部的转换方法?

最佳答案

将枚举更改为从基于 0 的索引开始并使用 Enum.values()[index]。这是一个简单的代码示例,您可能需要对无效枚举值引入某种验证:

import java.io.BufferedInputStream;
import java.util.Scanner;

class Scratch {
    public static void main(String[] args) {
        Scanner input = new Scanner(new BufferedInputStream(System.in));
        System.out.println("Enter Value");
        int choice = Integer.parseInt(input.nextLine());
        System.out.println(choice);
        Options enumValue = Options.values()[choice];
        System.out.println(enumValue);
    }
}

enum Options{
    ADDITION(0),
    MULTIPLICATION(1),
    EVALUATION(2),
    DERIVIATE(3),
    EXIT(4);

    public final int value;

    Options(int value){
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

输出

enter image description here

另外仅供引用,Enum.values()[index] 可能有点贵,所以如果性能是一个问题,请记住这一点。由于这是一项作业,我怀疑这是一个问题,但为了您自己的理解,需要记住这一点。

关于java - Java 中 int 转换为 enum,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49846479/

相关文章:

java - Java线程中的消息对话

java - 如何重新执行 Log4j "Default Initialization Procedure"?

c# - 试图将标志枚举解析为字符串

javascript - 使用其中的字符串作为函数名称(Javascript)

scala - 为什么映射到 Scala 枚举的 ValueSet 不会更改值的类型?

c# - 是否有 LINQ 扩展或(一组合理/高效的 LINQ 扩展)确定集合是否至少有 'x' 个元素?

java - 在glassfish中加载restful webapp时如何解决IllegalStateException?

Java:如何干净利落地处理没有外部库的情况?

c# - 自定义数据模型 setter

Delphi for..in循环设置枚举顺序