este es un gato :
La implementación de una calculadora infija a Postfix y necesidad de comprobar si un operador tiene una prioridad más baja que otra. Esto es lo que tengo hasta ahora:
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
}
He intentado una serie de cosas diferentes para comprobar la procedencia del carbón que se pasa, pero en vano. ¿Hay una manera fácil de comparar dos valores de una enumeración? Voy a tener que crear un bucle?
ernest_k:
Es fácil comparar si tiene un método que traduce un "operador" char
a un valor de enumeración.
Por ejemplo:
static Operators getOperatorForChar(char op) {
for(Operators val: values())
if(op == val.operator)
return val; //return enum type
return null;
}
Y entonces se puede poner en práctica su método usando:
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;
}