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

数字猜谜游戏:正整数最大值输入验证循环故障排查

数字猜谜游戏最大值输入验证修复

你的代码存在几个关键问题,导致验证循环无法正常工作:

  • NaN判断逻辑错误:NaN != NaN的结果永远是false(NaN和任何值都不相等,包括自身),必须用isNaN()函数来判断输入是否为非数字。
  • 未执行验证函数:你在全局作用域单独调用了prompt,但没有触发get_suggestion函数,等于验证逻辑根本没运行。
  • 验证条件不符合需求:只判断了>0,但需求是大于1的正整数,且没处理非整数值(比如"3.5"会被parseInt转成3,不符合整数要求)。
  • 未处理取消输入:用户点击prompt的取消按钮会返回null,此时parseInt(null)得到NaN,会导致死循环。

修正后的代码

// 调用验证函数获取合法的最大值
const maxNumber = get_suggestion("Help me come up with a range from 1 to a higher number. Type in a number greater than 1.");

function get_suggestion(promptText) {
    let validInput = false;
    let input, parsedNum;
    
    while (!validInput) {
        input = window.prompt(promptText);
        // 处理用户取消输入的情况
        if (input === null) {
            alert("请输入一个有效的数字!");
            continue;
        }
        parsedNum = parseInt(input, 10); // 指定十进制解析,避免八进制意外
        
        // 验证:非NaN、是整数、且大于1
        if (!isNaN(parsedNum) && Number.isInteger(parsedNum) && parsedNum > 1) {
            validInput = true;
            document.getElementById('message').innerHTML = "Guess a number!";
        } else {
            // 更新提示,告知用户输入错误
            promptText = "输入无效!请输入一个大于1的正整数。";
        }
    }
    return parsedNum;
}

关键改动说明

  • 用!isNaN(parsedNum)替代错误的NaN比较逻辑,正确判断输入是否为有效数字。
  • 添加Number.isInteger(parsedNum)确保输入是整数,避免非整数值蒙混过关。
  • 处理input === null的情况,避免用户取消输入导致死循环。
  • 当输入错误时更新提示文本,让用户明确知道需要输入什么。
  • 调用get_suggestion函数获取合法值,替代全局作用域的单独prompt调用。
  • 给parseInt添加第二个参数10,确保以十进制解析数字,避免输入"08"这类值被错误解析为八进制。

内容的提问来源于stack exchange,提问作者ms_tes

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 17:06:49