2011-10-30 42 views
1
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語句。計算一個詞的拼字比分

+0

你做'總和=總和+ 0;',我不知道的JavaScript,所以我不知道是什麼'默認:'方法,但我沒有看到任何其他增量的總和。 – Griffin

+0

我希望JS能夠遍歷給定的單詞,並根據字母表將它添加到總數中以產生分數。例如:ABB應該給出7分! – methuselah

+0

只有一個'case'和'default'的'switch'語句與'if' /'else'完全相同 - 我明白你在試驗,但這是一個非常糟糕的模式。 – evan

回答

2

嘗試建模信及其拼字遊戲點值作爲關聯數組之間的關係,而不是作爲兩個平行陣列:

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

Javascript中沒有關聯數組。你正在描述的那個東西叫做對象:) – Andreas

+0

你可能已經意識到,計算實際的scrablle得分,需要考慮另外兩件事情:董事會特殊瓷磚(雙字/雙字母等),並計算額外得分創建了交叉詞 – Guy

+1

[我確實](http://cross-tables.com/results.php?p=436)。看起來好像OP在擔心這一點。 – pholser

1

也許仔細看看行

switch(letter) 

是?

+0

或者更好的,對於(i = 0;我 ObscureRobot

+0

我有什麼混雜的東西嗎? – methuselah

1

您正在處理整個單詞,因爲它是單個字母,並試圖找到它在字母表中的位置。由於它不在字母表中,因此您會得到零。相反,你需要循環單詞的字母。

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 

祝你好運。

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

你可以避免遍歷整個字母表在每個字母通過以對象(又名關聯數組)的形式定義分數來定義單詞。此外,你的「字母」變量實際上是整個單詞,所以你需要單獨循環訪問字母。下面結合了這兩種想法:

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