我注意到這個問題之前問過幾次,但我似乎無法找到任何真正幫助我的東西。我目前正試圖讓我的計算器執行加,減,乘,除,但無法弄清楚如何讓不同的操作執行。需要幫助製作一個計算器,可以執行多個操作
編輯:我想出瞭如何爲每個操作做這個除了添加操作。出於某種原因,我收到一條錯誤消息:「無法從添加到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);
}
將每個運算符映射到相應的字符串表示並簡單地進行檢索 – Paul
示例:在'subtractKeyPressed'中,將'_operation'設置爲等於Sub對象。然後當等於被按下時,它使用'Sub'作爲操作。 – forgivenson
我已更新我的代碼並進行了更改。正如我下面所說的,我收到「無法從添加到BinaryOperator轉換」的錯誤。 – sqwert