Java数组获取3个最小与最大值问题:min3结果异常如何修复?
修复数组中获取3个最小值的逻辑错误
问题原因
你获取三个最小值的逻辑存在漏洞:当当前值既不小于min1也不小于min2时,代码直接将min3赋值为当前值,这会导致后续遍历到较大数值时,覆盖掉之前正确的第三小值。比如遍历到数组最后一个元素4时,由于它不满足小于min1(-100)或min2(-98)的条件,执行else分支把min3从-1改成了4,最终得到错误结果。
修复方案
修改最小值判断的else分支,只有当当前值**小于min3**时,才更新min3。同时对最大值逻辑做了优化,避免不必要的赋值(原最大值逻辑虽在测试数组中生效,但存在逻辑瑕疵)。
修复后的完整代码:
int max1 = Integer.MIN_VALUE; int max2 = Integer.MIN_VALUE; int max3 = Integer.MIN_VALUE; int min1 = Integer.MAX_VALUE; int min2 = Integer.MAX_VALUE; int min3 = Integer.MAX_VALUE; if(nums.length >= 3) { for(Integer value : nums) { int current = value; // 优化后的Max逻辑 if(current > max1) { max3 = max2; max2 = max1; max1 = current; } else if(current > max2){ max3 = max2; max2 = current; } else if(current > max3) { max3 = current; } // 修复后的min逻辑 if(current < min1) { min3 = min2; min2 = min1; min1 = current; } else if(current < min2) { min3 = min2; min2 = current; } else if(current < min3) { min3 = current; } } System.out.println("max1 : " + max1 + " , max2 : " + max2 + " , max3 : " + max3); System.out.println("min1 : " + min1 + " , min2 : " + min2 + " , min3 : " + min3); }
验证结果
运行修复后的代码,输入数组[-100,-98,-1,2,3,4],控制台输出将变为:
max1 : 4 , max2 : 3 , max3 : 2 min1 : -100 , min2 : -98 , min3 : -1
完全符合预期结果。
内容的提问来源于stack exchange,提问作者Sercan Noyan Germiyanoğlu
相关产品推荐
相关产品推荐

