我正在尝试使用在编写“编程挑战很有趣”时按下按钮值的产品。我在每个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);
任何想法为什么会这样做?感谢
答案 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")
将它分开:
所以它总是如此。正确的方法是:
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/