Как переписать мой метод toPostfix() для использования isOperator()?
В моей программе я работаю над преобразованием из инфикса в постфикс. У меня есть метод с именем isOperator(), который будет возвращать true, если предшествование оператора больше 0.
Я должен переписать метод toPostfix() с помощью isOperator(), но я не уверен, с чего начать.
public class Expression {
private static final String SPACE = " ";
private static final String PLUS = "+";
private static final String MINUS = "-";
public static int rank(String operator) {
switch (operator) {
case "*":
case "/":
return 2;
case PLUS:
case MINUS: //2
return 1;
default:
return -1;
}
}
public static boolean isOperator(String token) { //4
if (rank(token) > 0){
return true;
}
return false;
}
public static String toPostfix(String infixExpr) {
StringBuilder output = new StringBuilder();
Stack<String> operators = new ArrayStack<>();
for (String token: infixExpr.split("\\s+")) {
if (rank(token) > 0) { // operator
// pop equal or higher precedence
while (!operators.isEmpty() &&
rank(operators.peek()) >= rank(token)) {
output.append(operators.pop() + SPACE);
}
operators.push(token);
} else { // operand
output.append(token + SPACE);
}
}
while (!operators.isEmpty()) {
output.append(operators.pop() + SPACE);
}
return output.toString();
}
public static void main(String[] args) {
System.out.println(rank("/"));
String infix = "a * b * c + d / e / f";
System.out.println(toPostfix(infix));
}
}
2 ответа
Решение
+ Изменить if(rank(token) > 0){
в вашем методе postfix для isOperator(token)
Изменить: if(rank(token) > 0){
Для того, чтобы: isOperator(token)