输入两位数时查找数组最大值的JavaScript程序运行异常问题
问题原因
prompt-sync获取的用户输入默认是字符串类型,代码未做类型转换就直接存入数组参与大小比较,此时比较逻辑是按字符串的字典序执行,而非数值大小对比。- 例如字符串
"10"和"7"对比时,会优先对比首位字符的Unicode编码:'1'的编码值小于'7',因此会判定"10" < "7",最终得到错误的最大值结果。 - 额外隐患:代码中初始最大值
temp赋值为0,如果数组元素全为负数,也会得到错误结果。
修复方案
只要做两处核心修改即可:
- 获取输入时统一转换为数值类型,可使用
Number()或者parseInt()完成转换 - 优化初始最大值的设置,改为负无穷
-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
相关产品推荐
相关产品推荐

