Javascript 创建一个猜谜游戏,计算机猜测用户输入的数字
考虑到用户输入应该在1到1000之间,我尝试使用1-1000(排序)整数数组的二进制搜索来输出以下内容: 我只需要输出--忽略格式设置。现在,代码:Javascript 创建一个猜谜游戏,计算机猜测用户输入的数字,javascript,binary-search,Javascript,Binary Search,考虑到用户输入应该在1到1000之间,我尝试使用1-1000(排序)整数数组的二进制搜索来输出以下内容: 我只需要输出--忽略格式设置。现在,代码: const testButton=document.getElementById(“测试”); testButton.addEventListener('单击',()=>{ myArray=新阵列(1000); 对于(i=0;i
const testButton=document.getElementById(“测试”);
testButton.addEventListener('单击',()=>{
myArray=新阵列(1000);
对于(i=0;i<1000;i++){
myArray[i]=i+1;
//只是为了视觉帮助,而不是最终输出的实际部分
document.getElementById(“boop”).innerHTML=myArray;
document.getElementById(“boop”).innerHTML+=`${myArray[myArray.length-1]}`;
}
var userInput=parseInt(document.getElementById(“input”).value);
设min=myArray[0];
设max=myArray[myArray.length-1];
如果(用户输入<1 | |用户输入>1000){
document.getElementById(“boop”).innerHTML+=“这不在1和1000之间。”;
}否则{
同时(最小值<最大值){
userInput=parseInt(document.getElementById(“input”).value);
设min=myArray[0];
设max=myArray[myArray.length-1];
设mid=myArray[myArray.length-1];
mid=parseInt(数学层(mid/2));
让计数=0;
如果(userInput==mid){
计数++;
document.getElementById(“boop”).innerHTML+=`猜测了${mid}并得到了它。我尝试了${count}次。`;
}else if(userInput>mid){
计数++;
document.getElementById(“boop”).innerHTML+=`猜测${mid}。过低。`;
最小值=中间值+1;
mid=parseInt(数学层(mid+(mid/2));
}否则{
计数++;
document.getElementById(“boop”).innerHTML+=`猜测${mid}。过高。`;
max=mid-1;
mid=parseInt(数学层(mid/2));
}
}
}
});代码>
开始比赛
在while循环中,每次都会重置为启动条件。所以本质上它每次都在不断地猜测500
while (min < max) {
userInput = parseInt(document.getElementById("input").value);
let min = myArray[0];
let max = myArray[myArray.length - 1];
while(最小值<最大值){
userInput=parseInt(document.getElementById(“input”).value);
设min=myArray[0];
设max=myArray[myArray.length-1];
最后两行在每次执行while循环时将其重置为初始条件(因此您是对的,它是在一个无限循环中)。它将其设置为根据猜测更改max或min,但在下次执行时将其重置(重置为1和1000)。我已更新了JSFIDLE
无限循环是因为while条件从未退出,因为该条件的计算结果始终为true
您的大多数代码都是正确的,但有一些小的逻辑缺陷,比如您在while循环中定义变量。您应该在while循环之外声明这些变量,否则这些值将永远不会更新
下面是片段
while (min < max) {
index = parseInt((max+min)/2);
let mid = myArray[index];
if (userInput == mid) {
count++;
document.getElementById("boop").innerHTML += `<p>Guessed ${mid} and got it. Took me ${count} tries.</p>`;
break;
} else if (userInput > mid) {
min = index;
count++;
document.getElementById("boop").innerHTML += `<p>Guessed ${mid}. Too low.</p>`;
} else {
max = index;
count++;
document.getElementById("boop").innerHTML += `<p>Guessed ${mid}. Too high.</p>`;
}
}
while(最小值<最大值){
索引=parseInt((最大+最小)/2);
设mid=myArray[index];
如果(userInput==mid){
计数++;
document.getElementById(“boop”).innerHTML+=`猜测了${mid}并得到了它。我尝试了${count}次。`;
打破
}else if(userInput>mid){
min=指数;
计数++;
document.getElementById(“boop”).innerHTML+=`猜测${mid}。过低。`;
}否则{
max=指数;
计数++;
document.getElementById(“boop”).innerHTML+=`猜测${mid}。过高。`;
}
}
Dude,你真是个神!!非常感谢!很高兴提供帮助,欢迎来到Stack Overflow。如果此答案或任何其他答案解决了你的问题,请将其标记为已接受。