我之前已经注意到这个问题,有一些时间,但是我似乎找不到任何对我有帮助的东西。我目前正试图让我的计算器执行加,减,乘和除,但我无法弄清楚如何让不同的操作执行。
编辑:我已经想出了如何为每个操作执行此操作,除了添加操作。出于某种原因,我收到的错误是“#34;无法从Add转换为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;
}
}
更换" Sub"用任何操作和带有相应符号的return语句进行操作。 BinaryOperation还有一个文件:
package part2.operations;
public interface BinaryOperation {
public int perform(int left, int arg);
}
答案 0 :(得分:0)
在fooKeyPressed()
执行此操作:
public void divideKeyPressed() {
_left = _value;
_value = 0;
_op = _dop;
}
_op
的类型当然是`BinaryOperation。
查看Command设计模式以进行概括。
答案 1 :(得分:0)
我的错误源于我从part1导入我的Add操作和从part2导入我的BinaryOperation。通过从part2导入,我修复了错误。