2012-02-04 40 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的答案有更好的代码,使用它。在这里作为老师的回答,不是程序员回答