很难理解这个数字命理学程序的代码

时间:2014-03-13 03:19:59

标签: java

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)意味着什么?

非常感谢任何帮助。

4 个答案:

答案 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