【问题标题】:Printing the Stack in Java so that number are usable用 Java 打印堆栈以便该数字可用
【发布时间】:2019-03-26 07:46:27
【问题描述】:

我目前正在用 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 天 1234 2345 3456 天 + 1234 5801 天 + 7035

(如您所见,d 打印前三个输入的数字,然后 d + 显示 1234,将堆栈的最后两个数字 2345 和 3456 加在一起得到 5801,下一个 d + 然后加上 1234 和5801得到7035)

感谢任何帮助/提示,​​谢谢!

【问题讨论】:

  • 请提供预期输出
  • 你已经有了堆栈对象,你可以用它来计算。
  • 栈变量是什么类型的?
  • 您需要显示更多代码并准确描述问题所在。为什么打印堆栈会使其无法使用?
  • 不幸的是,您没有在应用程序的上下文中描述“不可用”的含义。但这似乎是必不可少的,如果不解释,我们就帮不了你。

标签: java calculator reverse notation polish


【解决方案1】:

我认为您只是在说,而不是这样做:

System.out.println(values)

您想在自己的行上打印每个数字。如果是这样,您只需这样做:

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

所以不要打印:

[1234, 2345, 3456]

您将打印:

1234
2345
3456

【讨论】:

  • n 是从哪里来的?
  • 来自“价值观”。这就是“for/in”的工作原理。该结构表示为“values”中的每个值循环一次,依次将“n”设置为每个值。所以第一次通过,'n' 将是 1234,第二次是 2345,第三次是 3456。
猜你喜欢
  • 2012-08-23
  • 2010-11-28
  • 1970-01-01
  • 1970-01-01
  • 2010-11-23
  • 2016-04-11
  • 2012-09-04
  • 2018-07-06
  • 1970-01-01
相关资源
最近更新 更多