-2
    String s = "1234";
    for(int i=0;i<s.length();i++)
    {
        System.out.println(s.charAt(i));
        System.out.println(s.charAt(i)-1);  
    }

在上面的代码行中,对于第一次迭代,即当 i=0 时,第一行应该打印 1,第二行应该打印 0,但第二行打印 48。为什么会这样?

4

3 回答 3

2
s.charAt(i)-1

此行获取索引处的字符i并将其减一。你需要知道的第一件事是字符也有一个数值,你可以用它们做数学运算。字符“1”的 ASCII 值是 49(看表:https ://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html )。因此,该charAt(i)调用返回表示 的字符,1其值为49,然后将其减少1,从而得到48

您需要在减少字符值之前将其转换为 Int 。尝试:

Character.getNumericValue(s.charAt(i)) - 1
于 2021-05-07T15:14:34.777 回答
0

Java 通常不对字符进行数学运算。因此,只要从 a 中减去 1 char,Java 就会首先将其转换为int,然后从中减去 1 int。正如另一个答案所解释'1'的,转换为 49,因此减法后得到 48。

如果您想要 char before ,只需在打印之前'1'转换回:char

    String s = "1234";
    for (int i = 0; i < s.length(); i++) {
        System.out.println(s.charAt(i));
        System.out.println((char) (s.charAt(i) - 1));
    }

输出:

1
0
2
1
3
2
4
3

然后它也适用于字母和标点符号:

    String s = "Wtf?";
W
V
t
s
f
e
?
>
于 2021-05-07T15:20:23.040 回答
0

我认为您遇到的问题是您获得了角色价值。在对其进行任何数学运算之前,您应该尝试将字符串/字符转换为整数。

于 2021-05-07T15:28:02.287 回答