我试图用堆栈计算简单表达式。请参阅我的代码,请告诉我如何解决它。
我想要它的方式:弹出堆栈中的下一个运算符,然后找到“x operator y”的结果。结果应为5.我想我必须转换为整数或其他东西。
import java.util.*;
public class testfil {
public static void main(String[] args) {
Stack<String> stack = new Stack<String>();
stack.push("+");
String x="2";
String y="3";
int result = (Integer.valueOf(x), Integer.valueOf(stack.pop()), Integer.valueOf(y));
System.out.print(result);
}
}
答案 0 :(得分:1)
您可以使用策略模式:
public enum Operators {
SUM {
public int perform(int a, int b) {
return a + b;
}
},
MULTIPLY {
public int perform(int a, int b) {
return a * b;
}
},
...
public abstract int perform(int a, int b);
}
然后你会像以下一样使用它:
stack.pop().perform(c, stack.pop().perform(a, b));
答案 1 :(得分:1)
而不是试图以这种方式使用二元运算符,因为它不起作用。对于看起来像二元运算符的字符串来说更是如此。
相反,您需要将逻辑实现为函数。
例如,添加功能...
public class Add implements BiFunction<Integer, Integer, Integer> {
public Integer apply(Integer a, Integer b) {
return a + b;
}
}
您的代码将如下所示
Stack<BiFunction> stack = new Stack<BiFunction>();
stack.push(new AddFunction());
Integer x=2;
Integer y=3;
int result = stack.pop().apply(x, y);