[英]Simple Calculator program java
我應該創建一個模擬一個非常簡單的計算器的程序
所以我被要求實現一個表示二進制(有2個參數)算術表達式的抽象類。 我還制作了4個子類 - 分區,加法等。
但是,我需要使用這些類“能夠表示任意表達式(即具有任意數量的項的表達式),例如像(5.0+8.1)*(2.0)
或((5.0+8.1)*(2.0))/12.5
這樣的表達式((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;
}
如果沒有過於困難,您可以重載構造函數,以便它們可以處理其他算術表達式:
public class Division extends ArithmeticExpression {
public Division(ArithmeticExpression x, ArithmeticExpression y) {
this.left = x.evaluate();
this.right = y.evaluate();
}
這樣,您可以使用現有的類並相互引用來創建復合表達式。
編輯 - 雖然現在我認為這不允許操作順序。 為此,你需要創建一個樹形結構。
所以,你需要編寫你的算術表達式......
為Arithmetic Expression
添加一個基類,名為Expression
並添加一個方法getValue()
。
WrapperExpression
應該擴展Expression,並且必須只有一個double屬性,它將通過getValue()返回。 現在,您的算術表達式子類將具有表達式作為左右屬性,並且在您的evaluate方法中,您將調用left.getValue() + right.getValue()
進行添加。
(2 + 8) * 10 + 2
示例
Expression wrap2 = new WrapperExpression(2);
// similar, wrap8, wrap10
Expression add2p8 = new Addition(wrap2, wrap8);
Expression add2p8m10 = new Multiplication(add2p8, wrap10);
Expression add2p8m10p2 = new Addition(add2p8m10, wrap2);
希望有所幫助。
編輯:表達式應該是一個抽象類(你不應該做表達式ex = new Expression();)甚至是一個接口:
public abstract class Expression {
// override this method in your subclasses, WrapperExpression, Addition and so on
public abstract double getValue();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.