private int sumCharValues (String input) {
String total = input.toLowerCase();
int result = 0;
for (int i = 0, n = total.length(); i < n; i++) {
char c = total.charAt(i);
result += (c - 'a' + 1);
}
return result;
}
我试图理解这段代码。 result += (c - 'a' + 1)
意味着什么?
非常感谢任何帮助。
答案 0 :(得分:0)
a += b
运算符(或多或少 - 见下文)a = a + (b)
的快捷方式。表达式(c - 'a' + 1)
将c
中存储的字符转换为整数,以使'a'
具有值1
,'b'
将具有值{ {1}}等,基于2
中字符的Unicode代码点。当循环退出时,input
将是输入中字符的所有数字等价物的总和。
复合作业result
在某些方面并非 <{em>} a += b
的快捷方式。首先,左侧仅评估一次,因此a = a + (b)
之类的内容只会增加vec[i++] += 3
一次。其次,对i
的类型进行隐式转换(如果需要)。因此,
a
答案 1 :(得分:0)
它在字母表中给出了字母的数字位置。
String total = input.toLowerCase();
表示所有字母均为小写。然后,c - 'a'
从'a'
的ascii值中减去c
的ascii值。这意味着你将从0-25获得任何东西。添加一个移动你的起点,给你1-26。
答案 2 :(得分:0)
在脑海中尝试或在代码中为此表达式添加print语句。
当字符串中的字符为&#39; a&#39;时,表达式为&#39; a&#39; - &#39; a&#39; + 1所以你可以看到结果是1。
当您对字符执行算术运算时,您实际上是在对其Unicode值执行此操作时, 对于非重音字母字符,与ASCII值相同。
对于&#39; a&#39;,此值为97,对于&#39; b&#39;,它是98等。 因此,上面的表达式返回字母表中字符的索引,从1开始,对于&#39; a&#39;。
答案 3 :(得分:0)
语句result += (c - 'a' + 1)
被评估为,
第一个char c被转换为它的ASCII值,然后我们得到char c的ascii值和char'a'之间的差值,然后我们加1。
此语句result += (c - 'a' + 1)
可以重写为result = result + (c - 'a' + 1)
,即我们只是添加结果的先前值并再次分配。
PS:'a'的ASCII值为97,'z'为122。
例如如果输入String是“stackoverflow”,它将被评估为,
char c ='s',result = 19
char c ='t',result = 39
char c ='a',result = 40
char c ='c',result = 43
char c ='k',result = 54
char c ='o',result = 69
char c ='v',result = 91
char c ='e',result = 96
char c ='r',result = 114
char c ='f',result = 120
char c ='l',result = 132
char c ='o',result = 147
char c ='w',result = 170