簡體   English   中英

簡單計算器程序java

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM