2016-11-01 2 views
-3

Я заметил этот вопрос, заданный раньше, с горсткой времени, однако я не могу найти ничего, что действительно мне помогло. В настоящее время я пытаюсь заставить мой калькулятор выполнять добавление, вычитание, умножение и разделение, но я не могу понять, как выполнить различные операции.Нужна помощь Создание калькулятора, который может выполнять несколько операций

EDIT: Я выяснил, как это сделать для каждой операции ЗА ИСКЛЮЧЕНИЕМ операции добавления. По какой-то причине я получаю сообщение об ошибке «невозможно преобразовать из« Добавить в BinaryOperator ». Код для добавления такой же, как и другие операторы, я не понимаю, почему только этот оператор вызывает ошибку.

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» с какой бы ни операцией и оператор возврата с соответствующим символом для операции. Существует также файл для BinaryOperation:

package part2.operations; 

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

Отобразите каждого оператора в соответствии с строковым представлением и просто получите соответственно – Paul

+0

Пример: в 'subtractKeyPressed', установите' _operation' равным объекту 'Sub'. Затем, когда нажата равная величина, в качестве операции используется 'Sub'. – forgivenson

+0

Я обновил свой код с изменениями. Как я сказал ниже, я получаю сообщение об ошибке «can not convert from Add to 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

Моя ошибка связана с тем фактом, что я импортировал свою операцию Add из части 1 и моего BinaryOperation из part2. Импортируя из part2, я исправил ошибку.

 Смежные вопросы

  • Нет связанных вопросов^_^