[英]Stack and operators
我试图用堆栈计算简单的表达式。 查看我的代码,然后告诉我如何解决。
我想要的方式:弹出堆栈中的下一个运算符,然后找到“ x运算符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);
}
}
您可以使用策略模式:
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));
不要尝试以这种方式使用二进制运算符,因为它将无法工作。 对于看起来像二进制运算符的字符串更是如此。
相反,您需要将逻辑实现为功能。
例如,添加功能...
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);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.