Java 堆栈和运算符

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

我试图用堆栈计算简单的表达式。看看我的代码,请告诉我如何解决它

我想要的方式是:弹出堆栈中的下一个操作符,然后找到“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);
  }
}
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