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

java堆栈和一个显然毫无意义的练习,java,stack,Java,Stack,我试图验证我对堆栈的理解。虽然我开始了解基本知识,但我还有一段路要走,我发现了一个激发我好奇心的例子 我的研究包括以下内容: 我被一行特别是上面提到的线程弄糊涂了 下面是整个代码部分-我的问题涉及while循环中的行-代码后面的详细信息: public static void main(String[] args) { char[] a = args[0].toCharArray(); int N =a.length; intStack s = new

我试图验证我对堆栈的理解。虽然我开始了解基本知识,但我还有一段路要走,我发现了一个激发我好奇心的例子

我的研究包括以下内容:

我被一行特别是上面提到的线程弄糊涂了

下面是整个代码部分-我的问题涉及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'的作用是什么?如果我正确理解了这行的其余部分,我们将引用char 0,因为单引号和-似乎是减法运算符。减去零——一个硬编码的零,而不是偶尔碰巧为零的变量——似乎毫无意义

我目前的假设是,对这个问题有一个微妙的答案——也就是说,这只是/似乎/是一个毫无意义的练习,但有一些真正神奇的事情发生了,我只是太模糊而无法理解

提前感谢这里的每一个人——我从这些建议中学到了很多东西——这很快成为我最喜欢和访问量最大的网站之一


最好的问候

因为a是一个包含数字的字符数组,[i++]-'0'是一种快速获取[i++]处字符数值的方法。可以将其视为从字符数组中该位置的任何字符的ASCII码中减去0的ASCII码。

由于a是一个包含数字的字符数组,[i++]-'0'是一种快速获取[i++]字符数值的方法。可以将其视为从字符数组中该位置的任何字符的ASCII码中减去0的ASCII码。

字符是使用某种编码表示的。在ASCII中,字符0表示为48,1表示为49,等等。因此,如果编码字符介于[48,57]之间,则减去'0'值48,即可得到字符的整数值。

字符使用某种编码表示。在ASCII中,字符0表示为48,1表示49,等等。因此,如果编码字符介于[48,57]之间,则减去'0'值48,即可得到字符的整数值。

字符-'0'只是ASCII和整数之间转换的简写方法。堆栈将单个数字存储为字符,请参阅下面的第二次转换

从1位整数到数字字符的转换

从数字字符到int的转换

从int到小写字母字符0='a',25='z'的转换

int x = 1;
char c = x + 'a';
从小写字母字符到int的转换

从int到大写字母字符0='A',25='Z'的转换

int x = 1;
char c = x + 'A';
从大写字母字符到int的转换

这些措施之所以有效,是因为:

0+48 = 0+'0' = '0'
0+65 = 0+'A' = 'A'
0+97 = 0+'a' = 'a'
-“0”只是ascii和INT之间转换的简写方法。堆栈将单个数字存储为字符,请参阅下面的第二次转换

从1位整数到数字字符的转换

从数字字符到int的转换

从int到小写字母字符0='a',25='z'的转换

int x = 1;
char c = x + 'a';
从小写字母字符到int的转换

从int到大写字母字符0='A',25='Z'的转换

int x = 1;
char c = x + 'A';
从大写字母字符到int的转换

这些措施之所以有效,是因为:

0+48 = 0+'0' = '0'
0+65 = 0+'A' = 'A'
0+97 = 0+'a' = 'a'

非常感谢您的回复-现在非常有意义。与我之前在Excel中所做的非常类似,将格式化为文本字符串的数字乘以1,将单元格转换为数字。在最后一行中是否发生了类似的情况?+非常感谢您的回复-现在非常有意义。与我之前在Excel中所做的非常类似,将格式化为文本字符串的数字乘以1,将单元格转换为数字。在最后一行中是否发生了类似的情况?+嗨,罗恩-这里有很多很棒的信息,非常感谢。我试图在实际场景中实现转换。添加或减去值取决于您开始使用的类型以及您希望转换的内容。这是有道理的。在您的示例中,您将0指定给“a”和“a”-我假设这只是表示它是第一个字母-当我希望看到上表中的值而不是97或65时,我一时感到困惑。那么,如果x=1,我们加上“a”,它会返回“b”吗?@Mac是的!1+'a'='b'也许你应该回顾一下char是一种数字类型,'a'与97和0x61完全相同。嗨,罗恩,这里有很多很棒的信息,非常感谢。我试图在实际场景中实现转换。添加或减去值取决于您开始使用的类型以及您希望转换的内容。这是有道理的。在您的示例中,您将0指定给“a”和“a”-我假设这只是表示它是第一个字母-当我希望看到上表中的值而不是97或65时,我一时感到困惑。那么,如果x=1,我们加上“a”,它会返回“b”吗?@Mac是的!1+'a'='b'也许你 uld审查认为字符是数字类型,“a”与97和0x61完全相同。
0+48 = 0+'0' = '0'
0+65 = 0+'A' = 'A'
0+97 = 0+'a' = 'a'