当前位置: 首页 > 知识库问答 >
问题:

比较枚举的值

龙永福
2023-03-14

实现后缀计算器,需要检查运算符的优先级是否低于另一个运算符。以下是我到目前为止所拥有的:

public enum Operators {

    ADD('+', 2), SUBTRACT('-', 2), MULTIPLY('*', 4), DIVIDE('/', 4);

    private char operator;
    private int precedence;

    Operators(char operator, int precedence) {
        this.operator = operator;
        this.precedence = precedence;
    }

    public char getOperator() {
        return operator;
    }

    public int getPrecedence() {
        return precedence;
    }
}

private static boolean isOperator(char c) {
    return c == Operators.ADD.getOperator() || c == Operators.SUBTRACT.getOperator()
            || c == Operators.MULTIPLY.getOperator() || c == Operators.DIVIDE.getOperator();
}

private static boolean isLowerPrecedence(char ch1, char ch2) {
    // STUCK HERE
}

我尝试了许多不同的方法来检查传入的字符的优先级,但都没有用。有没有简单的方法来比较一个枚举的两个值?我需要创建一个循环吗?

共有3个答案

张鸿宝
2023-03-14

或者,您可以像这样比较优先级:

private static boolean isLowerPrecedence(Operators operatorFirst, Operators operatorSecond) {
    if(operatorFirst.getPrecedence() < operatorSecond.getPrecedence()){
        return true;
    } else {
        return false;
    }
}

当然,也可以写成:

return operatorFirst.getPrecedence() < operatorSecond.getPrecedence();
薄烨
2023-03-14

您可以循环枚举的值以匹配正确的运算符并比较其优先级:

private static boolean isLowerPrecedence(char ch1, char ch2) {
    Integer first = null;
    Integer second = null;
    for (Operators o: Operators.values()) {
        if (o.getOperator() == ch1) {
            first = o.getPrecedence();
        }
        if (o.getOperator() == ch2) {
            second = o.getPrecedence();
        }
    }
    return (first != null && second !=null && first < second);
}

当没有找到操作符时返回< code>boolean可能会引起混淆。我建议您在这种情况下抛出一个异常

...
if (first == null || second ==null) throw new Exception("Operator not found.");
return first < second;
司凡
2023-03-14

如果您有一个将“操作符char转换为枚举值的方法,那么比较起来很容易。

例如:

static Operators getOperatorForChar(char op) {
    for(Operators val: values())
        if(op == val.operator)
            return val; //return enum type

    return null;
}

然后,您可以使用以下方法实现您的方法:

private static boolean isLowerPrecedence(char ch1, char ch2) {

    //assuming intention is to compare precedence of ch1 to that of ch2
    return getOperatorForChar(ch1).precedence < getOperatorForChar(ch2).precedence;
}
 类似资料:
  • 因为枚举成员不是有序的,所以它们只支持通过标识(identity) 和相等性 (equality) 进行比较。下面来看看 == 和 is 的使用: #!/usr/bin/env python3 # -*- coding: UTF-8 -*- from enum import Enum class User(Enum): Twowater = 98 Liangdianshui

  • 问题内容: 有没有办法检查一个枚举值是否大于或等于另一个值? 我想检查错误级别是否为“错误或以上”。 问题答案: 所有Java枚举都实现可比较:http : //java.sun.com/javase/6/docs/api/java/lang/Enum.html 您也可以使用该方法将它们转换为s,然后比较就很简单了。

  • 问题内容: 给出测试代码: 我想检查两个给定的枚举是否包含相同的值。 也许有更优雅的方式做到这一点? 问题答案: 建立一组名称: 为此(考虑将以上内容提取到方法中)。 然后:

  • 问题内容: 我知道Java枚举被编译为具有私有构造函数和一堆公共静态成员的类。比较给定枚举的两个成员时,我一直使用,例如 但是,我刚遇到一些使用equals运算符==而不是.equals()的代码: 我应该使用哪个运算符? 问题答案: 两者在技术上都是正确的。如果你查看源代码,它只是顺应了。 我使用,但是,这将是null安全的。

  • 具有以下定义 是否有一种方法可以正确执行比较以使用标准等式:

  • 问题内容: 这不是卡住我的问题,而是我正在寻找一种编写代码的整洁方法。 本质上,我正在编写一个事件驱动的应用程序。用户触发一个事件,该事件被发送到适当的对象,然后这些对象处理事件。现在,我正在编写偶数处理程序方法,并且希望使用switch语句确定如何处理事件。现在,在我研究通用结构时,事件类非常简单: 然后,在另一堂课中,我会看到类似以下内容的内容: 我会 喜欢 做的就是这样的事情(尽管我当然会坚