JavaScript编写自定义区间随机数生成器运行异常求助
随机数生成器代码问题排查与修复
现存问题
- prompt返回值为字符串类型,未转换为数值直接参与运算,存在隐式转换异常风险
- 第二个输入框提示文案错误,仍显示为输入最大值的提示,用户无法知晓要输入最小值
- 自定义函数
getRandomInt传入的max参数完全未被使用,函数逻辑与参数脱节 - 随机数生成公式错误:
- 未叠加最小值作为偏移量,生成的结果不会落在设定的最小值和最大值区间内
- 未给区间长度补1,会导致永远无法取到设定的最大值
- 无输入合法性校验,若用户输入非数字、最小值大于最大值、超出设定阈值的内容时,程序会异常输出
修复后完整代码
// 主动将输入转换为数值类型 let highNumber = Number(prompt("请输入最大数值\n上限为10000")); let lowNumber = Number(prompt("请输入最小数值\n上限为9998")); // 输入合法性校验 if (isNaN(highNumber) || isNaN(lowNumber)) { alert("请输入合法数字"); } else if (lowNumber >= highNumber) { alert("最小数值必须小于最大数值"); } else if (highNumber > 10000 || lowNumber > 9998) { alert("输入数值超出设定上限"); } else { function getRandomInt(min, max) { // 正确的包含上下限的随机整数公式 return Math.floor(Math.random() * (max - min + 1)) + min; } alert(getRandomInt(lowNumber, highNumber)); }
修改说明
- 新增输入值类型转换,统一转为数值类型避免运算异常
- 修正输入框提示文案,避免用户输入错误
- 调整
getRandomInt函数参数为最小值、最大值,逻辑与参数对应 - 替换为正确的随机整数生成公式,保证生成结果同时包含设定的最小值和最大值
- 新增输入合法性校验,出现非法输入时给出明确提示避免无响应
内容的提问来源于stack exchange,提问作者Zebulon Dexter
相关产品推荐
相关产品推荐

