Печать стека в Java, чтобы число можно было использовать - PullRequest
0 голосов
/ 26 марта 2019

В настоящее время я создаю калькулятор обратной польской нотации на Java. Я написал код так, чтобы при вводе «d» он печатал числа в стеке. Тем не менее, напечатанные числа будут непригодны для дальнейших расчетов (см. Изображение ниже).

enter image description here

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

Это мой код для этой конкретной части калькулятора:

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)

Спасибо за любую помощь / советы, спасибо!

enter image description here

1 Ответ

2 голосов
/ 26 марта 2019

Я думаю, вы просто говорите, что вместо этого:

System.out.println(values)

вы хотите напечатать каждое число в отдельной строке.Если это так, вы просто делаете это:

for n in values:
    System.out.println(n)

Поэтому вместо печати:

[1234, 2345, 3456]

вы напечатаете:

1234
2345
3456
...