输入5个数字找最大两个数的代码问题:递增输入时失效求解决方案
问题分析
原代码存在两个核心问题:
- 初始值设置错误:把
first_biggest_number和second_biggest_number初始化为0,若输入全为负数或全为大于0的递增数,初始值会干扰判断。比如输入递增正数时,所有数都比0大,只会更新第一个最大值,第二个最大值始终停留在0。 - 逻辑判断漏洞:仅判断新数是否大于第一个最大值,忽略了两种关键情况:新数比第一个最大值大时,需要把原来的第一个最大值降级为第二个最大值;新数介于第一个和第二个最大值之间时,需要更新第二个最大值。
修复方案
以下是修正后的代码,同时优化了输入处理(添加非数字输入校验):
// 初始值设为负无穷,兼容所有数值输入(包括负数) let first_biggest_number = -Infinity; let second_biggest_number = -Infinity; for (let i = 0; i <= 4; i++) { let input = window.prompt("Enter your number oi"); let number = Number.parseInt(input); // 处理非数字输入,重新获取当前次数的输入 if (isNaN(number)) { console.log("请输入有效数字"); i--; continue; } if (number > first_biggest_number) { // 新数更大,把原最大值降级为第二大值,再更新最大值 second_biggest_number = first_biggest_number; first_biggest_number = number; } else if (number > second_biggest_number) { // 新数介于两者之间,更新第二大值 second_biggest_number = number; } } console.log("第一个最大值:", first_biggest_number); console.log("第二个最大值:", second_biggest_number);
修复说明
- 初始值优化:用
-Infinity作为初始值,确保任何输入的数字都能比初始值大,彻底避免初始值干扰判断。 - 逻辑补全:
- 当新数大于第一个最大值时,先将原第一个最大值赋值给第二个最大值,再更新第一个最大值,保证两个最大值的层级关系正确。
- 新增判断分支,当新数不比第一个最大值大但比第二个大时,更新第二个最大值。
- 输入校验:添加
isNaN判断,避免非数字输入导致逻辑错误。
内容的提问来源于stack exchange,提问作者Hasan
相关产品推荐
相关产品推荐

