![](/img/trans.png)
[英]What does const char*** mean and how does it translate from C to Java?
[英]Java: What does subtracting a char by a char mean?
最近在通过一个程序时,我遇到了一个问题。 以下是该计划的一部分
public static int numberNeeded(String first, String second) {
int[] lettercounts = new int[26];
for(char c : first.toCharArray()){
lettercounts[c-'a']++;
}
我不明白这行代码的作用:
lettercounts[c-'a']++;
我猜它是在特定字符的lettercounts数组中递增值(最初为0); 我猜测'a'的索引是0而'z'是25.但我想了解这段代码是如何工作的。
目标是计算每个角色的出现次数。
c - 'a'
是一种在字母表中获得角色位置的聪明方法。 'a' - 'a'
会给你0.'b 'b' - 'a'
会给你'c' - 'a'
会给你2,依此类推。
该值用作数组的索引(正如您正确声明的那样,用零初始化)并且计数递增。
值得注意的是,如果字符串中包含除az
之外的任何字符(包括大写字符),则会中断,并且您会看到IndexOutOfBoundsException
这基本上只是将字符(在您的示例中为“a”)转换为它所代表的字母表中的字母数字。 'a'实际上有一个ASCII(技术上是utf-16,其前255个值是ASCII值)数值(97)。 所有其他的角色也是如此。 因此,如果char为'b',则将访问数组的第二个元素(位置1,98-97 = 1)。 如果char是'z',则数组的第26个元素将被访问(在位置25)。 您可以通过在搜索引擎中键入“ASCII表”轻松找到ASCII值表。
int a = 'b' - 'a';
是相同的:
int b = 98 - 97;
注意:您不能在小写和大写字母之间执行此操作,因为它们具有完全不同的ASCII值('A',例如是65,而'a'是97)。
Java中的char
变量是数值。 因此,从c
的值中减去'a'
将使其偏离字母表的开头。 这允许您将此值用作数组索引,正如您已正确猜到的那样。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.