打印并计算2d数组java中的最大值

ua4mk5z4  于 2021-06-29  发布在  Java
关注(0)|答案(2)|浏览(551)

我有一个2d数组java,我需要查看它并检查最大值,然后用数组中有多少个数组来打印它
我本来想这样做,但没用

int[][] rand = new int[][]{
                {1, 80, 3, 4, 5},
                {13, 199, 80, 8},
                {12, 22, 80, 190}
        };

        int max = rand[0][0];
        int count = 0;
        for (int i = 0; i < rand.length; i++){
            for (int ii = 0; ii < rand[i].length; ii++) {
                if (rand[i][ii] > max) {
                    max = rand[i][ii];
                    count++;
                }

            }
        }
        System.out.println(max + " " + count);
0sgqnhkj

0sgqnhkj1#

您没有正确处理计数:

int max = rand[0][0];
int count = 0
for (int i = 0; i < rand.length; i++){
    for (int ii = 0; ii < rand[i].length; ii++) {
        if (rand[i][ii] > max) {
            max = rand[i][ii];
            count = 1; // a new maximum's first occurrence
        } else if (rand[i][ii] == max) {
            count++; // another occurrence of the current maximum
        }
    }
}
System.out.println(max + " " + count);

当你找到一个新的最大值,你应该重置 count 到1。
您应该检查当前元素是否等于当前最大值,并递增 count 如果是这样的话。
输出:

199 1

编辑:
修复了第一个元素为最大值的情况。结果是 count 应初始化为 0 毕竟,因为循环会重新访问第一个元素,所以如果它是最大值,我们不想再计算两次。

7gs2gvoe

7gs2gvoe2#

您可以使用流:

int max = Arrays.stream(rand)
            .mapToInt(row -> Arrays.stream(row).max().getAsInt())
            .max().getAsInt();

    int count = Arrays.stream(rand)
            .mapToInt(row -> (int) Arrays.stream(row).filter(i-> i==max).count())
            .reduce(Integer::sum).getAsInt();

相关问题