如何在Java中找出二维数组的最大值与最小值(附文件读取代码)
如何在Java中查找二维数组的最大值与最小值
先看你提供的读取文件到二维数组的代码,我先帮你完善一些细节(比如异常处理、数组越界防护),再添加查找最值的实现方法,这样整体逻辑更完整健壮。
首先修正原代码的小问题并补充功能
原代码里的空catch块不利于调试,而且没有做数组越界的防护,我调整后加上了最值查找的方法:
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class Average { // 假设确定是10行12列的二维数组 static Integer[][] myDouble = new Integer[10][12]; static int x = 0, y = 0; public Average() { // 用try-with-resources自动关闭流,避免资源泄漏 try (BufferedReader in = new BufferedReader(new FileReader("StudentIdAverage.txt"))) { String line; // 限制行数不超过数组长度,防止越界 while ((line = in.readLine()) != null && x < myDouble.length) { String[] values = line.split("\\s+"); // 限制列数不超过每行的长度 for (int i = 0; i < values.length && y < myDouble[x].length; i++) { int strDouble = Integer.parseInt(values[i]); myDouble[x][y] = strDouble; y++; } x++; y = 0; } } catch (IOException ioException) { // 打印异常堆栈,方便排查文件读取问题 ioException.printStackTrace(); } } // 查找二维数组的最大值 public int findMaxValue() { // 初始化最大值为整数最小值,确保第一个有效值能覆盖它 int max = Integer.MIN_VALUE; for (Integer[] row : myDouble) { for (Integer num : row) { // 处理Integer类型可能的null值,避免空指针 if (num != null && num > max) { max = num; } } } return max; } // 查找二维数组的最小值 public int findMinValue() { int min = Integer.MAX_VALUE; for (Integer[] row : myDouble) { for (Integer num : row) { if (num != null && num < min) { min = num; } } } return min; } // 测试用的main方法 public static void main(String[] args) { Average average = new Average(); System.out.println("二维数组的最大值: " + average.findMaxValue()); System.out.println("二维数组的最小值: " + average.findMinValue()); } }
关键逻辑说明
- 遍历逻辑:用增强for循环遍历每一行和每个元素,代码更简洁易读,不用手动处理索引
- null值处理:因为你用的是
Integer引用类型数组,可能存在未赋值的null元素,所以必须先判断元素不为null,避免空指针异常 - 最值初始化:最大值初始化为
Integer.MIN_VALUE,最小值初始化为Integer.MAX_VALUE,保证第一个有效值能正确更新它们 - 资源与异常优化:用try-with-resources自动关闭IO流,同时打印异常信息,方便调试文件读取的问题
如果你的数组是int基本类型(不会有null),可以简化掉null判断:
// 针对int类型二维数组的最大值查找 public int findMaxForIntArray(int[][] arr) { int max = Integer.MIN_VALUE; for (int[] row : arr) { for (int num : row) { if (num > max) { max = num; } } } return max; }
希望这个方案能帮到你!
内容的提问来源于stack exchange,提问作者John Forza
相关产品推荐
相关产品推荐

