Javascript 创建一个猜谜游戏,计算机猜测用户输入的数字

Javascript 创建一个猜谜游戏,计算机猜测用户输入的数字,javascript,binary-search,Javascript,Binary Search,考虑到用户输入应该在1到1000之间,我尝试使用1-1000(排序)整数数组的二进制搜索来输出以下内容: 我只需要输出--忽略格式设置。现在,代码: const testButton=document.getElementById(“测试”); testButton.addEventListener('单击',()=>{ myArray=新阵列(1000); 对于(i=0;i

考虑到用户输入应该在1到1000之间,我尝试使用1-1000(排序)整数数组的二进制搜索来输出以下内容:

我只需要输出--忽略格式设置。现在,代码:

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。如果此答案或任何其他答案解决了你的问题,请将其标记为已接受。