我應該創建一個程序來模擬一個非常簡單的計算器簡單的計算器程序的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