我正在尝试实现一个计算器。为了简单起见,我希望一开始只能使用“ *,+,-”。到目前为止,我的基本框架是这样的。
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();
}
答案 0 :(得分:1)
您不一定需要实现显式树。如果用户输入完整表达式,则可以使用堆栈即时对其进行评估。
答案 1 :(得分:0)
我建议使用ArrayList之类的集合,从第[-1]个元素执行搜索(并从右向左移动),并使用一条语句检查第一个运算符,然后对这些元素执行该操作以该索引的右边。