我正在尝试构建一个简单的数字猜谜游戏numberGuess(),用于跟踪玩家的尝试次数,但如果玩家猜到已经猜到的数字,则不会跟踪尝试。
唯一不断发生的错误是,如果玩家猜测他不止一次猜测的第一个数字 - 游戏会在不应该的时候记录该尝试。但是,如果玩家猜测任何其他数字,但第一个不止一次,它的效果非常好。
例如,如果玩家按此顺序猜测:2,5,2,3,总尝试次数应该显示为3,但它显示为4。
但是,如果玩家按此顺序猜测2,5,5,3,则总尝试次数正确显示为3.
我有几个小时和几个小时修补这个代码,并试图在问这里之前解决这个问题,但是已经碰壁了。这似乎是一个我无法弄清楚的简单修复。如果你发现了修复这个小错误的错误,请告诉我!
function numberGuess () {
var number = Math.floor(Math.random() * 100 + 1); // Generates a random number between 0 and 100
var totalGuesses = []; // Array to stores all the guesses
var guess = Number(prompt("Welcome to number guess! Guess a number between 1 and 100")); // Prompts guessor to guess first number
while (guess != number) { //loop runs while user has not guessed the number
if (!guess) { // User cancels prompts
return;
}
else if (totalGuesses.indexOf(guess) >= 0) { // Checks to see if guess has already been guessed
guess = prompt ("You already guessed that number before. Give me another guess.");
}
else {
totalGuesses.push(guess);
if (guess > number) {
guess = prompt ("Your number is too high. Try Again. Don't give up!");
}
else {
guess = prompt ("Your number is too low. Try Again. I know you can do it!");
}
}
}
// Guess is correct!
alert("Congratulations! You guessed the number! It took you " + (totalGuesses.length +1) + " attempts!");
};
numberGuess();
答案 0 :(得分:0)
问题在于if语句的以下分支:
else if (totalGuesses.indexOf(guess) >= 0) { // Checks to see if guess has already been guessed
guess = prompt ("You already guessed that number before. Give me another guess.");
}
在此代码中,您并未将猜测添加到totalGuesses
数组中,因为它已经被猜到了。因此,即使猜测数量增加了一个,totalGuesses
数组中的项目数也保持不变。
一个hacky解决方案是将猜测添加到totalGuesses
数组中。但更好的解决方案是使用totalGuesses
作为集合(仅限唯一值)并使用从0开始的计数器变量来跟踪用户所做的猜测次数。
此外,虽然您假设数组中的索引从0开始正确,但数组的length
属性返回数组中的项数,即使索引从0,将始终返回正确数量的项目。因此,您不需要在结果中添加1。
alert("Congratulations! You guessed the number! It took you " + totalGuesses.length + " attempts!");
我还注意到的一点是,如果用户在他/她的第一次猜测时输入的数字不是数字,代码会正确地将其转换为数字,但是如果用户输入的内容不是&# 39;他/她的第一次猜测后的数字,它将保持为一个字符串。