В настоящее время я создаю калькулятор обратной польской нотации на Java. Я написал код так, чтобы при вводе «d» он печатал числа в стеке. Тем не менее, напечатанные числа будут непригодны для дальнейших расчетов (см. Изображение ниже).
Принимая во внимание, что после того, как числа будут напечатаны, их можно будет использовать в командной строке, чтобы я мог выполнить следующий расчет.
Это мой код для этой конкретной части калькулятора:
import java.io.*;
import java.util.Arrays;
import java.util.Stack;
public class SRPN {
private Stack<Integer> stack = new Stack<>();
public void processCommand(String input) {
if(input.equals("+")) {
long n1 = stack.pop();
long n2 = stack.pop();
long result = n1 + n2;
if(result > Integer.MAX_VALUE) {
result = Integer.MAX_VALUE;
}
else if(result < Integer.MIN_VALUE) {
result = Integer.MIN_VALUE;
}
stack.push((int)result);
}
else if (input.equals("-")) {
long n1 = stack.pop();
long n2 = stack.pop();
long result = n2 - n1;
if(result > Integer.MAX_VALUE) {
result = Integer.MAX_VALUE;
}
else if(result < Integer.MIN_VALUE) {
result = Integer.MIN_VALUE;
}
stack.push((int)result);
}
else if (input.equals("*")) {
int n1 = stack.pop();
int n2 = stack.pop();
int result = n1 * n2;
if(result > Integer.MAX_VALUE) {
result = Integer.MAX_VALUE;
}
else if(result < Integer.MIN_VALUE) {
result = Integer.MIN_VALUE;
}
stack.push((int)result);
}
else if (input.equals("%")) {
int n1 = stack.pop();
int n2 = stack.pop();
int result = n1 % n2;
stack.push((int)result);
}
else if (input.equals("/")) {
double n1 = stack.pop();
double n2 = stack.pop();
double result = n2 / n1;
stack.push((int)result);
}
else if (input.equals("d")) {
String values = Arrays.toString(stack.toArray());
System.out.println(values);
}
else if (input.contentEquals("=")) {
System.out.println(stack.peek());
}
else // assume it's a number
{
stack.push(Integer.valueOf(input));
}
}
Я просто не могу понять, как заставить печатать номера стопок для использования.
Ожидаемый вывод: d печатает числа, введенные в стек:
1234 2345 3456 d 1234 2345 3456 d + 1234 5801 d + 7035
(как вы можете видеть выше, d печатает первые три введенных числа, затем d + отображает 1234, складывает последние два числа в стеке, 2345 и 3456, чтобы получить 5801, следующий d + затем добавляет 1234 и 5801, чтобы получить 7035)
Спасибо за любую помощь / советы, спасибо!