给电话键盘提供数值

时间:2012-02-04 22:36:49

标签: javascript math

我正在尝试使用在编写“编程挑战很有趣”时按下按钮值的产品。我在每个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语句,因为字符串很长。我通过在我的for循环中放入document.write(sum)来展示这一点。

    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);

任何想法为什么会这样做?感谢

3 个答案:

答案 0 :(得分: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);

答案 1 :(得分:2)

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

和朋友们应该

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

因为你想OR而不是字母,而是条件

修改

@ Kolink的答案有更好的代码,使用它。在这里作为老师的答案,不是程序员回答

答案 2 :(得分:0)

你的问题是你的病情总是满满的。

一个例子:

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

将它分开:

  • 字母是否等于“a”? - &GT;也许
  • 是“b”定义的? - &GT;是
  • 是“c”定义的? - &GT;是

所以它总是如此。正确的方法是:

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/