需要帮助制作可以执行多项操作的计算器

时间:2016-11-01 19:50:22

标签: java calculator

我之前已经注意到这个问题,有一些时间,但是我似乎找不到任何对我有帮助的东西。我目前正试图让我的计算器执行加,减,乘和除,但我无法弄清楚如何让不同的操作执行。

编辑:我已经想出了如何为每个操作执行此操作,除了添加操作。出于某种原因,我收到的错误是“#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);
}

2 个答案:

答案 0 :(得分:0)

fooKeyPressed()执行此操作:

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

_op的类型当然是`BinaryOperation。

查看Command设计模式以进行概括。

答案 1 :(得分:0)

我的错误源于我从part1导入我的Add操作和从part2导入我的BinaryOperation。通过从part2导入,我修复了错误。