我应该创建一个程序来模拟一个非常简单的计算器简单的计算器程序的Java
所以我一直要求实现一个表示二进制(有2个参数)算术表达式的抽象类。我还由4子类 - 除法,加法,等等
然而,我需要使用这些类是 “能代表任何任意表达(即,具有的 方面的任意数的表达式),用于例如像(5.0+8.1)*(2.0)
或((5.0+8.1)*(2.0))/12.5
一种表现,因为我的crswork规格报价。
换句话说,我的计算器必须能够使用任何算术表达式。
请帮助。
public abstract class ArithmeticExpression { // base abstract superclass
double left;
double right;
double result;
public abstract void evaluate();
public abstract void display();
}
// ------------------------------------ Addition subclassed from base class
public class Addition extends ArithmeticExpression {
public Addition(double x, double y) {
this.left = x;
this.right = y;
}
@Override
public void evaluate() {
result = left + right;
}
@Override
public void display() {
System.out.println
("The expression and result is: " + left + " + " + right + " = "
+ result);
}
}
// ------------------------------------ Subtract subclassed from base class
public class Subtract extends ArithmeticExpression {
public Subtract(double x, double y) {
this.left = x;
this.right = y;
}
@Override
public void evaluate() {
result = left - right;
}
@Override
public void display() {
System.out.println
("The expression and result is: " + left + " - " + right + " = "
+ result);
}
}
// ------------------------------------ Mulitplication subclassed from base
// class
public class Multiplication extends ArithmeticExpression {
public Multiplication(double x, double y) {
this.left = x;
this.right = y;
}
@Override
public void evaluate() {
result = left * right;
}
@Override
public void display() {
System.out.println
("The expression and result is: " + left + " * " + right + " = "
+ result);
}
}
// ------------------------------------ Division subclassed from base class
public class Division extends ArithmeticExpression {
public Division(double x, double y) {
this.left = x;
this.right = y;
}
@Override
public void evaluate() {
result = left/right;
}
@Override
public void display() {
System.out.println("The expression and result is: " + left + "/"
+ right + " = " + result);
}
}
这是我在制定评估方法返回值时的攻击。它工作吗?
public abstract ArithmeticExpression evaluate();
//------------------------------------ Addition subclassed from base class
public class Addition extends ArithmeticExpression {
public Addition(double x, double y) {
this.left = x;
this.right = y;
}
@Override
public ArithmeticExpression evaluate() {
result = left + right;
return this;
}
一些提示:从右到左解析;找到基于卫生间最内层的操作并从那里开始;递归地定义解析代码。 – vandale
你正在上什么课程?这几乎肯定要求语法树分析器。在调用你实现的4个基本计算之前,表达式字符串被解析。 – neurite
以计算机科学。我应该怎么做?解析表达式字符串?如何? – user2997545