Шаг 8. Обработка арифметических операций

Если рассмотреть любую арифметическую операцию, например сложение, то видно, что она состоит из двух операндов и самой операции:

23 + 11

Для реализации такого действия в нашем калькуляторе, необходимо сначала набрать первое число, окончанием набора числа будет нажатие на кнопку операции. При этом первое число должно быть запомнено. Для этого создадим переменную уровня класса

private double leftNum;

в ней будут храниться левые операнды наших арифметических выражений.

При нажатии на кнопку операции, также, необходимо запомнить, какой была эта операция. Для списка операций создадим перечисление:

enum Oper {Plus, Minus, Mul, Div, Nop}

и переменную уровня класса, хранящую код последней операции:

private Oper lastOper = Oper.Nop;

сразу же присвоим ей значение пустой операции.

На этом этапе необходимо ввести изменение в метод numAction, поскольку после нажатия на кнопку операции, на экран должно вводиться новое число. Для этого создадим переменную-флаг, которая будет сигнализировать: вводить число заново или добавлять выбранную цифру к уже существующему

private boolean needClear;

Внесите изменение в метод numAction таким образом, что если needClear имеет значение true, новая цифра не добавлялась бы к существующему числу, а число начиналось бы заново.

Теперь необходимо создать еще одну переменную, в которой будет храниться правый операнд:

private double rightNum;

После этого напишем новый метод operAction, который будет вызываться в методах PerformAction при нажатии на кнопки с арифметическими операциями:

private void operAction(Oper op){

execLastOper(); //выполнить последнюю операцию

lastOper = op; //запомнить выбранную операцию

needClear=true;//установить флаг очистки

}

Для удобства выполнение последней операции реализуем в виде отдельного метода:

private void execLastOper(){

//сначала обрабатываем пустую операцию

//последняя операция будет пустой

// -в самом начале программы;

// -после нажатия на кнопку очистки (С)

// -после нажатия на кнопку =

if(lastOper == Oper.Nop){

//записываем набранное число в левый операнд

leftNum = Double.parseDouble(lbScreen.getText());

//правый операнд равен 0

rightNum=0;

return;

}

//если последняя операция не пустая, то:

// мы текущее число записываем в правый операнд

rightNum = Double.parseDouble(lbScreen.getText());

// выполняем нужную операцию

// и результат ее записываем в левый операнд

switch(lastOper){

case Plus:

leftNum += rightNum;

break;

case Minus:

leftNum -= rightNum;

break;

case Mul:

leftNum *= rightNum;

break;

case Div:

if(rightNum!=0) //чтобы избежать деления на 0

leftNum /= rightNum;

break;

}

// обнуляем правый операнд (для новой операции)

rightNum=0;

// выводим на экран калькулятора результат операции

lbScreen.setText(String.valueOf(leftNum));

}

Теперь необходимо создать в конструкотре обработчики события actionPerformed для четырех кнопок с арифметическими операциями и вызвать в них метод operAction с соотвествующими параметрами.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: