letter = prompt("Enter a word please");
letter = letter.toUpperCase();
// define letters and respective scores
alphabet = ['A','B','C','D','E','F','G','H','I','J','K','L','M', 'N','O','P','Q',
'R','S','T','U','V','W','X','Y','Z']
alphabetScore = [1, 3, 3, 2, 1, 4, 2, 4, 1, 8, 5, 1, 3, 1, 1, 3, 10, 1, 1, 1, 1, 4, 4, 8, 4, 10]
// start sum
sum=0
for (i=0; i<alphabet.length; i++)
{
switch(letter)
{
case (alphabet[i]): sum+=alphabetScore[i]; break;
default: sum=sum+0;
}
}
alert (sum);
我正在尝试构建一个计算单词拼写分数的程序。但是每次我输入一个单词,它都会返回0。为什么会发生这种情况?很抱歉连续的JS帖子-我是语言新手,一直在接受额外的实际任务,以提高我对该语言的知识。在本例中,我一直在尝试在for循环中使用switch语句。
发布于 2011-10-31 02:28:07
尝试将字母及其拼写点值之间的关系建模为关联数组,而不是两个并行数组:
var word = prompt("Enter a word please");
word = word.toUpperCase();
scores = { 'A' : 1, 'B' : 3, 'C' : 3, /* ... */ 'Z' : 10 };
var sum = 0;
for (var i = 0; i < word.length; ++i) {
sum += scores[word.charAt(i)] || 0;
}
alert(sum);
发布于 2011-10-31 02:27:17
这不是使用switch的适当方式。
switch
通常被用来替代几个相应的if ... else if ... else if ... else
。事情就是这么简单。在本例中,您只需要在循环中使用一条if
语句。实际上你需要一个双循环。
for each letter in the word
for each letter in the alphabet
if they match
increment score
祝好运。
发布于 2011-10-31 02:40:57
您可以通过以对象的形式定义分数来避免循环遍历单词中每个字母的整个字母表(也称为关联数组)。此外,您的"letter“变量实际上是整个单词,因此您需要逐个遍历字母。下面将这两个概念结合起来:
var word = prompt("Enter a word please");
word = word.toUpperCase();
var alphabet = {
A: 1,
B: 3,
C: 3,
D: 2,
E: 1,
F: 4,
G: 2,
H: 4,
I: 1,
J: 8,
K: 5,
L: 1,
M: 3,
N: 1,
O: 1,
P: 3,
Q: 10,
R: 1,
S: 1,
T: 1,
U: 1,
V: 4,
W: 4,
X: 8,
Y: 4,
Z: 10
}
var letter, i, sum = 0;
for (i = 0; i < word.length; i++) {
letter = word[i];
sum += alphabet[letter];
}
alert(sum);
https://stackoverflow.com/questions/7946817
复制相似问题