JavaScript:电脑猜我的数字游戏,不能重复猜错的数字



寻求一些反馈。

我对编程很陌生。在过去的几天里,尝试以下挑战:一个用户输入一个0-5的数字(我举起了多少根手指?(,计算机随机猜测这个数字是什么,以及猜测它需要多少次尝试。我设法写了一个代码来执行这个操作,但有时计算机需要20多次尝试。我想最多只需要6次尝试,因为只有6个数字。

document.getElementById("submitButton").onclick = function() {
var chosenNumber = document.getElementById("myNumber").value;
var gotIt = false;
var howManyGuesses = 0;
var cmpGuess = 0;
var temp = "";
var numbers = [0, 1, 2, 3, 4, 5];
var ranNums = [];
i = numbers.length
console.log(numbers);
console.log(ranNums);
if (chosenNumber < 0 || chosenNumber > 5) {
alert("Please choose a number between 0 and 5.")
return;
}
while (gotIt == false) {
cmpGuess = Math.floor(Math.random() * (i + 1));

howManyGuesses = howManyGuesses + 1;

if (cmpGuess == chosenNumber) {
gotIt = true;
alert("Got it! You number was " + chosenNumber + " and it took me " + howManyGuesses + " guesses to get it!")
} else {
numbers.splice(cmpGuess, 1);
ranNums.push(cmpGuess);
i--;
}
}

}

我一直在处理网上收到的信息,不确定拼接和推送是否正常工作。在我添加I-之前,在最后,计算机似乎仍然进行了多次尝试。我添加了它,现在它似乎总是6或更低,但我的浏览器不断崩溃。

有人能看看这个代码,也许能给我一些反馈吗?

非常感谢!

您的逻辑有缺陷。该代码选择一个0和i + 1之间的随机数,如果猜测不正确,则减少i--(并在numbers上使用splice,但该数组再也不会在循环中使用,因此它毫无用处(。

让我们想象一下,在第一次迭代中,它会选择2。它在射程之间,所以没关系。但它不是正确的——用户将5放在输入框中——所以它将i减少了一。在下一次迭代中,它可能会再次选择2,因为它仍在当前范围内。

与其将cmpGuess视为猜测的数字,不如将其视为猜测的索引。因此,您可以删除不包含猜测数字的索引,从您正在提取的池中删除错误的数字。

你已经接近了,你基本上需要改变:

if (cmpGuess == chosenNumber) {

至:

if (numbers[cmpGuess] == chosenNumber) {

在这一点上,您的代码应该可以工作(但是,我不确定ranNums.push(cmpGuess);用于什么(。

您可以使用这种方法来查找数字。代码中的注释:

//The variables you are given in the problem:
const choosen = 2;
const min = 0;
const max = 5;
//A function to simluate "computer guessing"
const guess = (min, max, target) => {
//Iterate every value between min - max, incrementing i by 1 each time
for (let i = min; i <= max; i += 1) {
//Check if the value at the current index is the value we're looking for
if (i === target) {
return i;
}
}
//If iterate all values between min - max and target isnt found, return null to indicate that
return null;
}
const numberGuesses = guess(min, max, choosen);
//Function to generate little message based on results of guess()
const message = numberGuesses => Boolean(numberGuesses) ? `${choosen} found in ${numberGuesses} guesses` : `Couldn't find ${choosen}`;
console.log(message(numberGuesses));

最新更新