Создание калькулятора с отменой последней операции с помощью ArrayDeque и Deque в Java
Здравствуйте! Меня зовут Алексей, и сегодня я хотел бы поделиться с вами своим опытом создания калькулятора с функцией отмены последней операции на языке программирования Java, используя интерфейсы ArrayDeque и Deque.Для начала, давайте разберемся, что такое ArrayDeque и Deque. ArrayDeque ー это реализация интерфейса Deque в Java, которая представляет собой двустороннюю очередь (очередь, в которой можно добавлять и удалять элементы как с начала, так и с конца). Deque ー это сокращение от ″двусторонняя очередь″.Давайте перейдем к самому коду⁚
java
import java.util.ArrayDeque;
import java.util.Deque;
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Deque
Scanner scanner new Scanner(System.in);
while (true) {
System.out.println(″Введите число или оператор ( , -, *, /, <)⁚″);
if (scanner.hasNextDouble) {
double number scanner.nextDouble;
stack.push(number);
} else {
String operator scanner.next;
if (operator.equals(″<″)) {
if (stack.size < 2) {
System.out.println(″Выполнение отмены невозможно⁚ недостаточно операндов.″);
} else {
stack.pop;
double result stack.pop;
stack.push(result);
System.out.println(″Результат предпоследней операции⁚ ″ result);
}
} else if (″ -*/".contains(operator)) {
if (stack.size < 2) {
System.out.println(″Вычисление операции невозможно⁚ недостаточно операндов.″);
} else {
double operand2 stack.pop;
double operand1 stack.pop;
double result calculate(operator, operand1, operand2);
stack.push(result);
System.out.println(″Результат операции ″ operand1 ″ ″ operator ″ ″ operand2 ″⁚ ″ result);
}
} else {
System.out.println(″Неверный оператор.″);
}
}
}
}
private static double calculate(String operator, double operand1, double operand2) {
switch (operator) {
case ″ ″⁚
return operand1 operand2;
case ″-″⁚
return operand1 ⎼ operand2;
case ″*″⁚
return operand1 * operand2;
case ″/":
return operand1 / operand2;
default⁚
throw new IllegalArgumentException(″Недопустимый оператор⁚ ″ operator);
}
}
}
Теперь, когда у нас есть код, давайте разберем его работу. Мы создали стек (очередь) с помощью ArrayDeque, в котором будем хранить операнды и результаты операций. Затем мы создаем объект Scanner для чтения ввода пользователя. Затем начинается бесконечный цикл, в котором мы запрашиваем у пользователя ввод чисел или операторов. Если пользователь вводит число, оно помещается в стек с помощью метода push. Если пользователь вводит оператор ″<″, мы проверяем, есть ли в стеке как минимум два операнда. Если да, мы выполняем операцию отмены последней операции, выводим результат предпоследней операции и помещаем его обратно в стек. Если же пользователь вводит оператор , -, *, /, мы выполняем обычную операцию с двумя операндами, выводим результат и помещаем его в стек. Если пользователь вводит неверный оператор, выводится сообщение об ошибке. Таким образом, мы создали калькулятор, который позволяет выполнять операции и отменять последнюю операцию при необходимости.