【发布时间】:2013-11-29 07:31:53
【问题描述】:
我应该创建一个模拟一个非常简单的计算器的程序
所以我被要求实现一个代表二进制(有 2 个参数)算术表达式的抽象类。我还做了 4 个子类 - 除法、加法等。
但是,我需要使用这些类
“能够表示任何任意表达式(即具有任意数量的表达式
术语),例如我的 crswork 规范中引用的 (5.0+8.1)*(2.0) 或 ((5.0+8.1)*(2.0))/12.5 之类的表达式。
换句话说,我的计算器必须能够使用任何算术表达式。
请帮忙。
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;
}
【问题讨论】:
-
一些提示:从右到左解析;根据 parenteses 找到最里面的操作并从那里开始;递归地定义你的解析代码。
-
你上什么课?这几乎肯定需要语法树解析器。表达式字符串在调用您实现的 4 个基本计算之前被解析。
-
学习计算机科学。那是我应该做的吗?解析表达式字符串?以及如何?
-
表示任何表达式的类并不意味着您应该解析,但是,如果您可以添加此功能,那就太好了。
标签: java object calculator abstract