You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.31 23:05:26