2016-11-01 58 views
-3

我注意到這個問題之前問過幾次,但我似乎無法找到任何真正幫助我的東西。我目前正試圖讓我的計算器執行加,減,乘,除,但無法弄清楚如何讓不同的操作執行。需要幫助製作一個計算器,可以執行多個操作

編輯:我想出瞭如何爲每個操作做這個除了添加操作。出於某種原因,我收到一條錯誤消息:「無法從添加到BinaryOperator轉換」。 add的代碼與其他運算符相同,我不明白爲什麼只有這個運算符會觸發一個錯誤。

package part2.code; 

import part1.operations.Add; 
import part2.user_interface.CalculatorUI; 
import part2.operations.Sub; 
import part2.operations.Multiply; 
import part2.operations.Divide; 
import part2.operations.BinaryOperation; 

public class Calculator { 


// The current value of the calculator 
    private int _value; 
    private int _left; 
    private int _right; 
    private BinaryOperation _op; 
    private Add _aop; 
    private Sub _sop; 
    private Multiply _mop; 
    private Divide _dop; 


// The user interface via which a user interacts 
    private CalculatorUI _ui; 

public Calculator(CalculatorUI calculatorUI) { 
     _ui = calculatorUI; 
     _value = 0; 
     _left = 0; 
     _right = 0; 
     _aop = new Add(); 
     _sop = new Sub(); 
     _mop = new Multiply(); 
     _dop = new Divide(); 
    } 

public void digitKeyPressed(int d) { 
     _value = _value * 10 + d; 
     _ui.updateDisplay(); 
    } 

public void clearKeyPressed() { 
      _value = 0; 
      _ui.updateDisplay(); 
     } 

public void addKeyPressed() { 
     _left = _value; 
     _value = 0; 
     _op = _aop; 
    } 

public void subtractKeyPressed() { 
     _left = _value; 
     _value = 0; 
     _op = _sop; 
    } 

public void multiplyKeyPressed() { 
     _left = _value; 
     _value = 0; 
     _op = _mop; 
    } 

public void divideKeyPressed() { 
     _left = _value; 
     _value = 0; 
     _op = _dop; 
    } 

public void equalKeyPressed() { 
     _right = _value; 
     _value = _op.perform(_left,_right); 
     _ui.updateDisplay(); 
    } 

public int getValue() { 
     return _value; 
    } 
} 

這是計算器的代碼,伴隨着我對每個操作看起來像這樣的文件:

package part2.operations; 

public class Sub implements BinaryOperation { 
    public Sub() {} 

    @Override 
    public int perform(int left, int right) { 
      return left - right; 
    } 
} 

更換「子」用哪個操作,並與相應的符號return語句爲操作。還爲BinaryOperation文件:

package part2.operations; 

public interface BinaryOperation { 
    public int perform(int left, int arg); 
} 
+0

將每個運算符映射到相應的字符串表示並簡單地進行檢索 – Paul

+0

示例:在'subtractKeyPressed'中,將'_operation'設置爲等於Sub對象。然後當等於被按下時,它使用'Sub'作爲操作。 – forgivenson

+0

我已更新我的代碼並進行了更改。正如我下面所說的,我收到「無法從添加到BinaryOperator轉換」的錯誤。 – sqwert

回答

0

在你fooKeyPressed()做到這一點:

public void divideKeyPressed() { 
    _left = _value; 
    _value = 0; 
    _op = _dop; 
} 

類型的_op當然BinaryOperation的`。

調查Command泛化的設計模式。

+0

這樣做會給我帶來一個我無法從Divide轉換爲Sub的錯誤? – sqwert

+0

請修改問題中的代碼以顯示此內容?您分配給的成員變量不應該是'Sub'類型,它應該是'BinaryOperation'類型。 – Arkadiy

+0

我更新了問題中的代碼,我在你的例子中編輯了addKeyPressed而不是Divide。 – sqwert

0

我的錯誤是由於我從part1導入了我的Add操作以及從part2導入了我的BinaryOperation。通過從part2導入,我修復了錯誤。