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

输入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作为初始值,确保任何输入的数字都能比初始值大,彻底避免初始值干扰判断。
  • 逻辑补全:
    1. 当新数大于第一个最大值时,先将原第一个最大值赋值给第二个最大值,再更新第一个最大值,保证两个最大值的层级关系正确。
    2. 新增判断分支,当新数不比第一个最大值大但比第二个大时,更新第二个最大值。
  • 输入校验:添加isNaN判断,避免非数字输入导致逻辑错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 06:54:35