2014-03-13 62 views
0
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)是什麼意思?很難理解這個代碼的命理程序

任何幫助將非常感激。

+1

那是因爲你可以一個字符轉換成它的ASCII值 – Leo

+1

@Leo - 實際上是Unicode值。 :) –

+0

@TedHopp無論;-) – Leo

回答

0

a += b運營商是(或多或少—見下文)a = a + (b)的快捷方式。表達式(c - 'a' + 1)基於input中的字符的Unicode代碼點,將存儲在c中的字符轉換爲整數,使得'a'將具有值1,'b'將具有值2等。當循環退出時,result將是輸入中字符的所有數字等值的總和。

化合物分配a += b不是恰好是以幾種方式爲a = a + (b)的快捷方式。首先,左側評估只有一次,所以像vec[i++] += 3將只增加i一次。其次,對a的類型有一個隱含的投射(如果有必要)。因此,

byte a = 0; 
a += 1; // works 
a = a + 1; // compiler error -- a + 1 is an int value 
0

它給出字母在字母表中的數字位置。

String total = input.toLowerCase();表示所有字母均爲小寫。然後,c - 'a'c的ascii值中減去'a'的ascii值。這意味着你會得到0-25的任何東西。添加一個移動你的起點,給你1-26。

0

在您的腦海中試試或在您的代碼中爲此表達式添加打印語句。

當字符串中的字符是「A」,表達讀「一」 - 「一」 + 1,所以你可以看到,結果爲1

當你對人物進行算術,你實際上正在使用它的Unicode值, 對於非重音字母字符,它與ASCII值相同。

對於'a',這個值是97,'b'是98,等等。 所以上面的表達式返回字母表中的字符索引,從'a'開始。

0

聲明result += (c - 'a' + 1)如,

第一個char c的轉換爲字符的ASCII值進行評估,然後我們得到的char c和字符「A」和ASCII值之間的差異,然後我們把它加1。

此聲明result += (c - 'a' + 1)可以重寫爲result = result + (c - 'a' + 1),即我們只是添加結果的前一個值並重新賦值。

PS:的 'a' 爲97及 'Z' 的ASCII值是122

對於例如如果輸入字符串爲 「計算器」,它將被評價爲,

炭C = 'S',結果= 19
炭C = 'T',結果= 39
炭C = 'A',結果= 40
炭C = 'C',結果= 43
炭C =數 'k',結果= 54
炭C = 'O',結果= 69
炭C = 'v',結果= 91
char c ='e',結果= 96
char c ='r',結果= 114
char c ='f',result = 120
字符C = 'L',結果= 132
焦炭C = 'O',結果= 147
焦炭C = 'W',結果= 170