You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript实现1-100猜数字游戏出现无限循环崩溃该如何修复

猜数字游戏问题排查与修复方案

问题根因

  • 无限循环的核心原因是你仅在调用函数时获取了1次用户输入,整个while循环逻辑中没有更新input变量的值:如果第一次输入的数值不等于随机生成的目标数字,循环永远无法触发break条件,会持续重复执行判断分支,最终导致程序崩溃。
  • prompt返回值为字符串类型,直接和数字类型的目标值做比较,存在类型匹配隐患,如果用户输入非数字内容,也会导致永远无法命中相等判断,触发无限循环。
  • 函数定义的rand、number、tries形参属于冗余设计,你在函数内部直接对这几个变量重新赋值,完全不需要从外部传参。

修复后的完整代码

var generator = function(){
    // 生成1-100的随机整数
    const rand = 100 * Math.random();
    const targetNumber = Math.ceil(rand);
    let tries = 0;
    
    while (true){
        // 每次循环都重新获取用户输入
        let input = prompt("请输入一个1-100之间的数字");
        // 处理用户点取消的情况
        if (input === null) {
            console.log("游戏已退出");
            break;
        }
        // 把输入转成数字,校验合法性
        input = Number(input);
        if (isNaN(input) || input < 1 || input > 100) {
            console.log("请输入有效的1-100之间的数字");
            continue;
        }

        tries += 1;
        if (input > targetNumber){
            console.log("你输入的数字比我想的要大");
        } else if (input < targetNumber){
            console.log("你输入的数字比我想的要小");
        } else {
            console.log(`恭喜你猜对了!总共猜了${tries}次`);
            break;
        }
    }
}
generator();

关键修改说明

  • 把获取用户输入的prompt逻辑移到了while循环内部,每次判断前都重新获取最新的用户输入,保证循环能走到终止条件。
  • 增加了输入合法性校验:处理用户取消输入、输入非数字、输入超出1-100范围的场景,避免异常输入导致死循环。
  • 移除了冗余的函数形参,优化了变量命名可读性,统计猜题次数的逻辑统一放到判断分支外,避免重复代码。

内容的提问来源于stack exchange,提问作者Αντώνιος Θωμάς

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 06:15:03