Java 堆栈和运算符
我试图用堆栈计算简单的表达式。看看我的代码,请告诉我如何解决它 我想要的方式是:弹出堆栈中的下一个操作符,然后找到“x操作符y”的结果。结果应该是5。我想我必须转换成整数什么的Java 堆栈和运算符,java,stack,operators,Java,Stack,Operators,我试图用堆栈计算简单的表达式。看看我的代码,请告诉我如何解决它 我想要的方式是:弹出堆栈中的下一个操作符,然后找到“x操作符y”的结果。结果应该是5。我想我必须转换成整数什么的 import java.util.*; public class testfil { public static void main(String[] args) { Stack<String> stack = new Stack<String>(); stack.pu
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);
}
}
import java.util.*;
公共类测试文件{
公共静态void main(字符串[]args){
堆栈=新堆栈();
stack.push(“+”);
字符串x=“2”;
字符串y=“3”;
int result=(Integer.valueOf(x),Integer.valueOf(stack.pop()),Integer.valueOf(y));
系统输出打印(结果);
}
}
您可以使用策略模式:
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;
}
}
公共类添加实现了双功能{
公共整数应用(整数a、整数b){
返回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);
Stack Stack=新堆栈();
stack.push(newaddfunction());
整数x=2;
整数y=3;
int result=stack.pop().apply(x,y);
如果要将它们转换为int
,为什么x
和y
字符串?您也无法将“+”
转换为int
,(int,int,int)
将不会解析为int
,因为x和y也来自堆栈,但不是我发布的代码的int。那么,我如何编写代码使字符串“+”理解“+”作为运算符呢@DragondraikkYou需要检查堆栈中的项是否是您正在处理的运算符之一。如果您的Java版本为7或更高版本,则可以使用开关
,否则需要使用If-then-else