当前位置: 首页 > 知识库问答 >
问题:

java堆栈和一个明显毫无意义的练习

李胤
2023-03-14

我在验证我对堆栈的理解。当我开始理解基础知识,我还有很多路要走的时候,我发现了一个激发我好奇心的例子。

我的研究包括以下内容:

我对上面提到的线程中的一行感到困惑。

以下是整个代码部分--我的问题是while循环中的那一行--代码后面的详细信息:

     public static void main(String[] args)
    {
    char[] a = args[0].toCharArray();
    int N =a.length;
    intStack s = new intStack();
    for (int i = 0; i<N; i++)
    {
        if (a[i]=='+')
        {
            s.push(s.pop() + s.pop());
        }
        if (a[i]=='*')
        {
            s.push(s.pop() * s.pop());
        }
        if ((a[i] >= '0') && (a[i] <= '9'))
        {
            s.push(0);
        }
        while ((a[i] >= '0') && (a[i] <= '9'))
        {
            s.push(10*s.pop() + (a[i++]-'0'));
        }
        Out.println(s.pop() + "");
    }
    }

我的问题是:-'0'有什么用途?如果我正确理解了该行的其余部分,那么我们引用的是char0(由于单引号),而-似乎是用于减法的运算符。减去零--硬编码的零,而不是偶尔碰巧为零的变量--似乎毫无意义。

致以最诚挚的问候

共有1个答案

湛光华
2023-03-14

由于a是包含数字的char数组,因此a[i++]-'0'是获取a[i++]char数值的快速方法。可以把它看作是从字符数组的那个位置的ASCII代码中减去0的ASCII代码。

 类似资料:
  • 在这个练习中,你会在难度上做一个大的跳跃,并且创建出用于管理数据库的完整的小型系统。这个数据库并不实用也存储不了太多东西,然而它展示了大多数到目前为止你学到的东西。它也以更加正规的方法介绍了内存分配,以及带领你熟悉文件处理。我们使用了一些文件IO函数,但是我并不想过多解释它们,你可以先试着自己理解。 像通常一样,输入下面整个程序,并且使之正常工作,之后我们会进行讨论: #include <stdi

  • 问题内容: 嗨,我正在尝试使用另一个空堆栈反转堆栈(我自己编写了一个堆栈)。由于某种原因,它无法正常工作。谁能帮我这个 ? 问题答案: while(!stack1.isEmpty()){ Integer value = (Integer)stack1.pop(); System.out.println(value); reverse.push(value); }

  • 6.1.3 堆栈段的说明 堆栈段是一个特殊的段,在程序中可以定义它,也可以不定义。除了要生成COM型执行文件的源程序外,一个完整的源程序一般最好定义堆栈段。如果在程序中不定义堆栈段,那么,操作系统在装入该执行程序时将自动为其指定一个64K字节的堆栈段。 在程序没有定义堆栈段的情况下,在由连接程序生成执行文件时,将会产生一条如下的警告信息,但程序员可以不理会它,所生成的执行文件是可以正常运行的。 w

  • 问题内容: 我目前有一个使用filebeat作为日志发送程序的体系结构,该结构将日志发送到日志存储索引器实例,然后发送到AWS中的托管elasticsearch。由于存在持续的TCP连接,因此我无法使用AWS ELB多个日志存储索引器实例进行负载平衡,因为文件信号始终会选择这些实例并将其发送到那里。所以我决定使用redis。现在,看到扩展redis并使之在ELK堆栈中具有高可用性组件是多么困难,我

  • 问题内容: 是局部变量,将其存储在堆或堆栈中的何处? 问题答案: 在堆上。每当您用来创建对象时,它都会在堆上分配。

  • 我已经有一个stack类在工作,但是现在我每次只能弹出一个元素,我希望能够同时弹出多个元素。无需多次使用推送和弹出。我试图创建两个函数来实现这一点。函数pushAll和popN。比如: 备注:输入参数all是一个数组,包含所有必须输入的元素。向量的最后一个元素必须在叠加后位于顶部。如果没有空间插入所有元素,则必须不插入任何元素,并且必须引发StackFullException异常。popN方法弹出