使用Java打印堆栈以使该数字可用

问题描述 投票:0回答:1

我目前正在用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

java calculator reverse notation polish
1个回答
2
投票

我想你只是说不是这样做的:

System.out.println(values)

您想要在自己的行上打印每个号码。如果是这样,你只需这样做:

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

而不是打印:

[1234, 2345, 3456]

你会打印:

1234
2345
3456
© www.soinside.com 2019 - 2024. All rights reserved.