Java禁用sort方法获取二维数组前5大数值报错求助
错误原因分析
你出现的编译错误核心是类型不匹配:
如果arrSize是你定义的二维int数组,那么arrSize[index]取到的是二维数组里的某一行(一个一维int数组),而Integer.MIN_VALUE是单个int类型的数值。你试图把一个int值赋值给一个int数组变量,这完全不符合Java的类型规则,所以编译器抛出了这个错误。
可行实现方法
方法一:遍历找最大值并标记(最直观)
核心逻辑:重复5次遍历整个二维数组,每次找到当前最大值,记录后把该位置的元素替换成Integer.MIN_VALUE(这样下次遍历就不会再选中它),最后收集这5个最大值。
示例代码:
import java.util.Random; public class TopFiveIn2DArray { public static void main(String[] args) { // 生成5x5的随机二维数组 int[][] arr = new int[5][5]; Random random = new Random(); for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { arr[i][j] = random.nextInt(100); // 生成0-99的随机数 } } // 输出原数组 System.out.println("原二维数组:"); for (int[] row : arr) { for (int num : row) { System.out.print(num + " "); } System.out.println(); } // 获取前5大数值 System.out.println("\n前5大数值:"); for (int k = 0; k < 5; k++) { int max = Integer.MIN_VALUE; int maxRow = 0; int maxCol = 0; // 遍历找当前最大值 for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { if (arr[i][j] > max) { max = arr[i][j]; maxRow = i; maxCol = j; } } } System.out.print(max + " "); // 标记已找到的最大值,避免重复选中 arr[maxRow][maxCol] = Integer.MIN_VALUE; } } }
注意这里修改的是arr[maxRow][maxCol](单个元素),而非整行,这就解决了你之前的类型错误。
方法二:用临时数组维护前5大值
如果不想修改原数组,可以用一个长度为5的临时数组存储当前找到的前5大值,每次遍历原数组的元素,和临时数组里的最小值比较,若当前元素更大则替换,最后临时数组里就是前5大的数。
示例代码:
import java.util.Random; public class TopFiveIn2DArray { public static void main(String[] args) { int[][] arr = new int[5][5]; Random random = new Random(); for (int i = 0; i < arr.length; i++) { for (int j = 0; j < arr[i].length; j++) { arr[i][j] = random.nextInt(100); } } // 初始化临时数组,存前5大值,初始为最小值 int[] topFive = new int[5]; for (int i = 0; i < topFive.length; i++) { topFive[i] = Integer.MIN_VALUE; } // 遍历原数组每个元素 for (int[] row : arr) { for (int num : row) { // 找到临时数组里的最小值位置 int minIndex = 0; for (int i = 1; i < topFive.length; i++) { if (topFive[i] < topFive[minIndex]) { minIndex = i; } } // 如果当前元素比临时数组最小值大,替换 if (num > topFive[minIndex]) { topFive[minIndex] = num; } } } // 输出前5大值 System.out.println("前5大数值:"); for (int num : topFive) { System.out.print(num + " "); } } }
这个方法不会修改原数组,适合需要保留原始数据的场景。
内容的提问来源于stack exchange,提问作者user21220101
相关产品推荐
相关产品推荐

