数组查找最大值时输出异常:结果为7而非10,求原因
问题分析与修复
错误原因
你的maximizeSum方法逻辑存在核心问题:
- 初始将
max设为数组第一个元素是正确的,但循环内的操作是每次取相邻两个元素的最大值,直接覆盖之前的max变量,而非用当前记录的最大值去和后续元素做比较。 - 以你的测试数组为例,末尾元素是
[1,7],最后一次循环时,Math.max(1,7)得到7,此时max被替换为7,之前已经找到的最大值10被直接覆盖,最终返回错误结果。 - 这种逻辑只有当最大值恰好出现在数组最后两个元素之一时才会返回正确结果,其余场景都会出错。
修复后的代码
修正逻辑,让每次循环都用当前记录的最大值与数组元素比较,始终保留更大的值:
public class FindMax { public static void main(String[] args) { int[] nums = {1,10,2,6,7,9,8,5,8,3,1,3,10,5,8,3,9,3,8,2,3,3,10,5,8,8,4,7,2,3,4,3,10,8,7,9,1,3,4,2,6,6,9,6,2,10,10,4,6,3,4,1,1,3,8,4,10,3,9,5,3,10,4,7,10,7,1,7}; int max = maximizeSum(nums); System.out.println(max); } public static int maximizeSum(int[] nums) { int max = nums[0]; // 遍历所有元素,用当前max与每个元素比较 for(int i = 1; i < nums.length; i++){ max = Math.max(max, nums[i]); } return max; } }
如果要保留原循环的边界逻辑,也可以这样修正:
public static int maximizeSum(int[] nums) { int max = nums[0]; for(int i=0; i < nums.length - 1; i++){ // 先取相邻元素的最大值,再和当前全局max比较 int currentAdjMax = Math.max(nums[i], nums[i+1]); max = Math.max(max, currentAdjMax); } return max; }
两种写法都能正确遍历数组,始终保留遍历过程中遇到的最大值,不会出现之前的覆盖问题。
内容的提问来源于stack exchange,提问作者Vaibhav More
相关产品推荐
相关产品推荐

