Java数组求最大值代码输出异常,请排查问题并给出修改方案
代码问题分析与修改方案
存在的问题
- 数组越界异常:
- main方法中创建的数组长度为5(索引范围0~4),但循环条件写为
i <= 5,会尝试访问array[5],直接触发ArrayIndexOutOfBoundsException。 Largest方法中的循环同样使用i <= 5,传入的数组长度仅为5,超出索引范围。
- main方法中创建的数组长度为5(索引范围0~4),但循环条件写为
- 最大值更新逻辑错误:
在Largest方法的判断逻辑中,当array[i] > largest时,错误地执行array[i] = largest;,这是将数组元素覆盖为当前最大值,正确逻辑应该是把largest更新为array[i]。 - 冗余方法调用与不必要打印:
- main方法中重复调用
Largest(array),第一次调用无意义且会输出中间过程; Largest方法内每次循环都打印largest,会输出不必要的中间值,干扰最终结果展示。
- main方法中重复调用
修改后的代码
package com.company; import java.util.*; public class Main { public static int Largest(int array[]) { int largest = Integer.MIN_VALUE; // 循环条件改为i < array.length,适配任意长度数组 for (int i = 0; i < array.length; i++) { if (array[i] > largest) { // 修正赋值逻辑,更新largest为当前数组元素 largest = array[i]; } } return largest; } public static void main(String[] args) { Scanner sc = new Scanner(System.in); int array[] = new int[5]; // 循环条件改为i < array.length,避免越界 for (int i = 0; i < array.length; i++) { array[i] = sc.nextInt(); System.out.println("输入的元素:" + array[i]); } // 只调用一次方法并保存结果 int max = Largest(array); System.out.println("largest element is : " + max); } }
关键修改说明
- 将所有循环条件从
i <=5改为i < array.length,这样代码能适配任意长度的数组,同时彻底避免数组越界问题。 - 修正
Largest方法中的赋值逻辑:把array[i] = largest;改为largest = array[i];,实现最大值的正确更新。 - 移除
Largest方法内的循环打印语句,只保留最终结果的输出;在main方法中只调用一次Largest方法并保存结果,避免冗余调用。
内容的提问来源于stack exchange,提问作者Kriti Bhardwaj
相关产品推荐
相关产品推荐

