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

输入两位数时查找数组最大值的JavaScript程序运行异常问题

问题原因
  • prompt-sync获取的用户输入默认是字符串类型,代码未做类型转换就直接存入数组参与大小比较,此时比较逻辑是按字符串的字典序执行,而非数值大小对比。
  • 例如字符串"10"和"7"对比时,会优先对比首位字符的Unicode编码:'1'的编码值小于'7',因此会判定"10" < "7",最终得到错误的最大值结果。
  • 额外隐患:代码中初始最大值temp赋值为0,如果数组元素全为负数,也会得到错误结果。
修复方案

只要做两处核心修改即可:

  1. 获取输入时统一转换为数值类型,可使用Number()或者parseInt()完成转换
  2. 优化初始最大值的设置,改为负无穷-Infinity,兼容全负数的使用场景

修改后的完整代码如下:

const ps = require("prompt-sync");
const prompt = ps();
console.log("\nFinding The Maximum Number In The Array");
console.log("---------------------------------------");
// 转换数组长度输入为数值类型
let length = Number(prompt("Enter the length of the array: "));
// 初始最大值设为负无穷,兼容全负数场景
let temp = -Infinity;
let maxnum;

let array = [];
for(let i=0; i<length;i++){
    // 转换每个数组元素输入为数值类型
    let num = Number(prompt(i+":"));
    array[i] = num;
}

console.log("\nlength: " + length);
for(let o=0; o < length ; o++ ){
    if(array[o] > temp){
        temp = array[o];
    }
    if(o == (length-1)){
       maxnum = temp;
       console.log("\ncurrent max " + maxnum);
    }
}

console.log("The maximum number is: "+ maxnum);

如果不需要自己手动实现最大值查找逻辑,也可以直接调用JS内置方法Math.max(...array)直接获取数组最大值,代码会更简洁。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:57:05