堆栈和运营商

时间:2015-05-06 09:22:40

标签: java stack operators

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

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

2 个答案:

答案 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);