- Cascaded if-else (wait! else?)
public static int precedence(String operator) {
if ("+".equals(operator)) {
return 2;
}
if ("*".equals(operator)) {
return 3;
}
if ("/".equals(operator)) {
return 3;
}
if ("-".equals(operator)) {
return 2;
}
if ("(".equals(operator)) {
return 0; //should be lowest
}
if (")".equals(operator)) {
return 0; //should be lowest
}
System.out.println("operator not recognized:" + operator);
return -1; //should not happen
}
- if-else with ||
static private int precedence(String s) {
if (s.equals("(") || s.equals(")")) {
return 0;
} else if (s.equals("*") || s.equals("/")) {
return 2;
}
return 1;
}
- verbose switch statement
private static int precedence(String s)
{
int p = 0;
switch (s)
{
case "+":
p = 1;
break;
case "-":
p = 1;
break;
case "*":
p = 2;
break;
case "/":
p = 2;
break;
case ")":
p = 0;
break;
case "(":
p = 0;
break;
}
return p;
}
- switch statement
static private int precedence(String s) {
switch (s.charAt(0)) {
case '(': return 0; // (
case ')': return 0; // ) one line for each
case '-': // empty stmt! Flows through...
case '+': return 1; // - or +
case '*': case '/': return 2; // * or / (on the same line)
default: return -1; // default: none of the above, error!
}
}
- Is this a good trick?
static String ops = "()-+*/";
private static int prec(char op) {
return ops.indexOf(""+op)/2;
}