计算单词的拼字游戏分数

问题描述 投票:1回答:7
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);

我正在尝试构建一个计算单词Scrabble得分的程序。但每次我输入一个单词 - 它返回0.为什么会发生这种情况?对于连续的JS帖子感到抱歉 - 我是该语言的新手,并且已经采取额外的实际任务来提高我对该语言的了解。在这种情况下,我一直在for循环中试验switch语句。

javascript
7个回答
2
投票

尝试将字母及其Scrabble点值之间的关系建模为关联数组,而不是两个并行数组:

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

2
投票

这不是使用开关的合适方式。

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

祝好运。


2
投票

通过以对象(a.k.a. associative array)的形式定义分数,可以避免在单词中的每个字母上循环遍及整个字母。此外,您的“字母”变量实际上是整个单词,因此您需要单独循环显示这些字母。以下结合了以下两个想法:

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

1
投票

也许仔细看看这条线

switch(letter) 

是?


1
投票

你把整个单词看作是一个单独的字母,并试图找到它在字母表中的位置。因为它根本不在字母表中,所以你得到零。相反,你需要循环单词的字母。


1
投票
sum = 0;
for(var i=0,l=letter.length;i<l;i++)
    sum += alphabetScore[alphabet.indexOf(letter[i])] 

1
投票
let word = prompt("Enter a word please");

const scrabble = {
  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
};

const sum = [...word].reduce((accu, letter) => { return accu + scrabble[letter.toLowerCase()]; }, 0);

alert(sum);
© www.soinside.com 2019 - 2024. All rights reserved.