在Java中将int转换为枚举

时间:2018-04-15 20:31:28

标签: java oop enums enumeration

我正在为课程作业编写一个多项式计算器,我想在切换案例中使用枚举。

这是我写的enum方法:

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

程序中的这个开关案例:

{{1}}

我想在switch case中使用enum,但我希望用户的输入是一个int,因为它是赋值的必要条件。

我想将我从用户获得的int转换为相应的枚举,并在切换案例中使用它。

有没有办法将它转换为正确的枚举而不使用枚举中的convert方法?

2 个答案:

答案 0 :(得分:1)

将您的枚举更改为从基于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]可能有点贵,所以如果性能问题请记住。由于这是一项任务,我怀疑这是一个值得关注的事情,但要记住你自己的理解。

答案 1 :(得分:1)

整数和枚举值之间的映射实际上并不是使用枚举值的API的一部分。现在,你要求用户输入一个整数。但是,如果您稍后编写GUI并在下拉列表中显示枚举值的名称,该怎么办?或者编写一个解析器来解析算术表达式?那些整数将不再相关。它们存在于菜单中,因此它们属于显示菜单的程序部分。

您可以引入一个Map<Integer,Options>来将用户输入映射到枚举值。但是,如果您为枚举添加了新值,则必须记住将其添加到Map

我将使用Options.values()返回的数组。迭代它以显示您的菜单,并使用它来按索引查找值。这种方法也有一些警告。如果重新排列代码中的值,它们的顺序也会在数组中发生变化。菜单选项的顺序会发生变化,可能会使用户感到困惑。但你的程序仍然会运行。使用枚举序数值的真正问题在于序列化它们(将它们写入持久存储,如文件),然后在更改顺序后尝试读取它们。只要你没有序列化你的枚举常量,就可以使用它们的序数值。