2012-02-04 38 views
1

我正在嘗試使用鍵入「編程挑戰很有趣」時按下按鈕的值的乘積。我已經在每個if/else if語句中定義了鍵,並運行for循環來獲取每個字母的值。給電話鍵盤的數字值

var string = "Programming Challenges are fun".toLowerCase(); 
var sum = 1; 
for (i = 0; i < string.length; i++) { 
    var letter = string[i]; 
    if (letter == "a" || "b" || "c") { 
     sum = sum*2; 
    } 

當我運行腳本時,它只是每次運行這個if語句多次,因爲字符串很長。我通過將document.write(sum)放入我的for循環中展示了這一點。

else if (letter == "d" || "e" || "f"){ 
     sum = sum*3; 
    } 
    else if (letter == "g" || "h" || "i"){ 
     sum = sum*4; 
    } 
    else if (letter == "j" || "k" || "l"){ 
     sum = sum*5; 
    } 
    else if (letter == "m" || "n" || "o"){ 
     sum = sum*6; 
    } 
    else if (letter == "p" || "r" || "s"){ 
     sum = sum*7; 
    } 
    else if (letter == "t" || "u" || "v"){ 
     sum = sum*8; 
    } 
    else if (letter == "w" || "x" || "y"){ 
     sum = sum*9; 
    } 
    else if (letter = ""){ 
     sum = sum; 
    } 
    document.write(sum); 
    document.write("<br>"); 
}; 

document.write(sum); 

任何想法,爲什麼它會這樣做?謝謝

回答

0

你的問題是你的狀況總是滿員。

一個例子:

if (letter == "a" || "b" || "c")

拆分它拆開:

  • 是字母等於 「一個」? - >也許
  • 是「b」的定義? - >是
  • 是否定義了「c」? - >是

所以它總是如此。正確的方式將是:

if(letter == "a" || letter == "b" || letter == "c")

更方便的方法是檢查ASCII值(檢查http://www.asciitable.com

字母 「a」 是在97和字母 「z」 爲122,你想以三個字母組合它們。順便說一句,你忘了字母Q和Z所以有一組以上;)

這裏的另一種方法:

var string = "Programming Challenges are fun".toLowerCase(); 
var sum = 1; 

// lower bound 
var a = 97; 
// upper bound 
var z = 122; 

for (i = 0; i < string.length; i++) { 
    // get the ascii value 
    var letter = string[i].charCodeAt(0); 

    // boundary check 
    if(letter >= a && letter <= z) { 
     // we remove the lower bound to get a relative position from 0-25 (alphabet has 26 characters) 
     // we divide by three and cut off all decimals (parseInt) so a,b,c become 0, d,e,f become 1 etc. 
     // then we add an offset of two so that a,b,c has factor 0+2=2, d e f has factor 1+2=3 and so on... 
     var factor = parseInt((letter - a)/3) + 2; 

     sum *= factor; 
    } 
} 

document.write(sum); 

你可以試一下上的jsfiddle:http://jsfiddle.net/uJGgV/1/

+0

沒有想過它就是這樣。真棒。謝謝 – 2012-02-04 23:27:25

3

因爲"b"是一個true值,所以即使該字母不是"a"它通過if條件。

相反,試試這個:

var keys = { 
     a:2, b:2, c:2, 
     d:3, e:3, f:3, 
     g:4, h:4, i:4, 
     j:5, k:5, l:5, 
     m:6, n:6, o:6, 
     p:7, q:7, r:7, s:7, 
     t:8, u:8, v:8, 
     w:9, x:9, y:9, z:9 
    }, 
    sum = 1, 
    string = "Programming Challenges are fun".toLowerCase(), 
    l = string.length, i; 
for(i=0; i<l; i++) { 
    if(keys[string[i]]) sum *= keys[string[i]]; 
} 
document.write("The total is: "+sum); 
2
if (letter == "d" || "e" || "f") 

和朋友應該

if ((letter == "d") || (letter == "e") || (letter == "f")) 

只要你想OR不信,但條件

編輯:

@ Kolink的答案有更好的代碼,使用它。在這裏作爲老師的回答,不是程序員回答