繁体   English   中英

堆栈和运算符

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM