实现后缀计算器,需要检查运算符的优先级是否低于另一个运算符。以下是我到目前为止所拥有的:
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
}
我尝试了许多不同的方法来检查传入的字符的优先级,但都没有用。有没有简单的方法来比较一个枚举的两个值?我需要创建一个循环吗?
或者,您可以像这样比较优先级:
private static boolean isLowerPrecedence(Operators operatorFirst, Operators operatorSecond) {
if(operatorFirst.getPrecedence() < operatorSecond.getPrecedence()){
return true;
} else {
return false;
}
}
当然,也可以写成:
return operatorFirst.getPrecedence() < operatorSecond.getPrecedence();
您可以循环枚举的值以匹配正确的运算符并比较其优先级:
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;
如果您有一个将“操作符”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语句确定如何处理事件。现在,在我研究通用结构时,事件类非常简单: 然后,在另一堂课中,我会看到类似以下内容的内容: 我会 喜欢 做的就是这样的事情(尽管我当然会坚