需要你的帮助。得到了这段代码,但不确定为什么我的else语句被执行,即使“if”符合要求。有人可以解释一下吗? 而且,有人可以指出我正确的方向..每次我输入一封信,无论它是否正确,它都被打印到猜测字母列表,我不知道如何停止打印它8次? 我已经保存了我的代码,如果这更容易:http://jsfiddle.net/5NfYj/
function guess(){
output = '';
userLetter = document.forms[0].letter.value;
document.forms[0].letter.value = '';
for(var c=0;c<theWord.length;c++){
if(userLetter === letters[c]){
display[c] = userLetter;
win--;
}else {
wrongGuess.push(userLetter);
document.forms[0].guessedLetters.value = wrongGuess;
}
output = output + display[c] + ' ';
}
document.forms[0].result.value = output;
}
答案 0 :(得分:1)
JavaScript字符串比较区分大小写。如果我在输入中放入一个小写字符,我可以使它工作,但如果我放一个大写字符,它将不会进入,因为你的for循环只是将它与小写字符进行比较。您可以使用.toLowerCase()
方法转换输入值,以便即使用户输入大写字母也能正常工作。
小提琴:http://jsfiddle.net/5NfYj/1/
注意:正如@ daniel0mullins指出的那样,添加错误猜测的逻辑将运行8次,因为它位于for
循环内。您应该使用一个表示它是否错误的标志,并在完成循环后将其添加到列表中。检查他的答案,了解如何解决这个问题。
答案 1 :(得分:1)
它正在显示多个猜测,因为你循环遍历整个单词。试试这个:
function guess(){
output = document.forms[0].result.value;
userLetter = document.forms[0].letter.value;
document.forms[0].letter.value = '';
var guessInWord = false;
for(var c=0;c<theWord.length;c++){
if(userLetter === letters[c]){
display[c] = userLetter;
var newOutput = output.split('');
newOutput[c] = userLetter;
output = newOutput.join('');
guessInWord = true;
win--;
}
}
if(!guessInWord) {
wrongGuess.push(userLetter);
document.forms[0].guessedLetters.value = wrongGuess;
}
document.forms[0].result.value = output;
}
这样它只会在检查整个单词后推送到wrongGuess数组,而不是在每个字母后面。
查看此fiddle
答案 2 :(得分:1)
请参阅http://jsfiddle.net/5NfYj/3/
for(var c=0;c<theWord.length;c++){
if(userLetter === letters[c]){
display[c] = userLetter;
win--;
}
output = output + display[c] + ' ';
}
wrongGuess.push(userLetter);
document.forms[0].guessedLetters.value = wrongGuess;
例如,当我输入a时,您的代码将遍历apetiser的所有8个字符。它匹配第一个字符并在框中显示,但是对于所有其他字符,它会选择else分支,因此会在猜测框中显示7次。