普通波兰语表示法中的Java计算器

时间:2018-12-03 21:19:05

标签: java

我正在尝试实现一个计算器。为了简单起见,我希望一开始只能使用“ *,+,-”。到目前为止,我的基本框架是这样的。

public class calculator{

public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    parse(scanner);
}

public static Expr parse(String input) {
    return parse(new Scanner(input));
}

public static Expr parse(Scanner input) {

    return null;
}

我的想法是将输入转换为一种不同对象的树,然后从根进行评估。现在我不知道哪种数据结构最适合它,什么是实现这些接口的最佳方法。

interface Expr {
Expr[] children();
int eval();
}
//Represents the binary operations "+,-,*"
interface BinOp extends Expr {
Expr left();

Expr right();
}
//Represents the unary operation "minus"
interface UnaryOp extends Expr {
Expr operand();
}

//Represents a number 
interface Constant extends Expr {
int val();
}

2 个答案:

答案 0 :(得分:1)

您不一定需要实现显式树。如果用户输入完整表达式,则可以使用堆栈即时对其进行评估。

答案 1 :(得分:0)

我建议使用ArrayList之类的集合,从第[-1]个元素执行搜索(并从右向左移动),并使用一条语句检查第一个运算符,然后对这些元素执行该操作以该索引的右边。