在 Java 二维数组中查找最小值和最大值

新手上路,请多包涵

一段时间以来,我一直在努力解决这个问题,需要一些帮助。我需要找到最小/最大值并将它们打印出来用于多维数组。这是我尝试过的两种方法。

 import java.util.*;

class MinMax {
    public static void main(String[] args) {
        int[][] data = {{3, 2, 5},
                {1, 4, 4, 8, 13},
                {9, 1, 0, 2},
                {0, 2, 6, 3, -1, -8}};
        Arrays.sort(data);
        System.out.println("Minimum = " + data[0]);
        System.out.println("Maximum = " + data[data.length - 1]);
    }
}

此版本符合但不运行。

 import java.util.*;

class MinMax {
    public static void main(String[] args) {
        int[][] data = {{3, 2, 5},
                {1, 4, 4, 8, 13},
                {9, 1, 0, 2},
                {0, 2, 6, 3, -1, -8}};

    public static int getMaxValue(int[] numbers) {
        int maxValue = numbers[0];
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] > maxValue) {
                maxValue = numbers[i];
            }
            return maxValue;
            {
                public static int getMinValue (int[] numbers) {
                    int minValue = numbers[0];
                    for (int i = 1; i < numbers.length; i++) {
                        if (numbers[i] < minValue) {
                            minValue = numbers[i];
                        }
                    }
                return minValue;
            }

这个版本在编译时给我带来了一堆错误。任何帮助是极大的赞赏。

原文由 Fancierwhale 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
2 个回答

好的,我已经修复了您的代码。实际上你的错误是你没有遍历多维数组的所有单元格。

因此,我在 getMinValue/getMinValue 方法中添加了额外的循环并固定了数组元素寻址。

 import java.util.*;

class MinMax {
    public static void main(String[] args) {
        int[][] data = {
                {3, 2, 5},
                {1, 4, 4, 8, 13},
                {9, 1, 0, 2},
                {0, 2, 6, 3, -1, -8}
        };
        System.out.println(getMaxValue(data));
        System.out.println(getMinValue(data));
    }

    public static int getMaxValue(int[][] numbers) {
        int maxValue = numbers[0][0];
        for (int j = 0; j < numbers.length; j++) {
            for (int i = 0; i < numbers[j].length; i++) {
                if (numbers[j][i] > maxValue) {
                    maxValue = numbers[j][i];
                }
            }
        }
        return maxValue;
    }

    public static int getMinValue(int[][] numbers) {
        int minValue = numbers[0][0];
        for (int j = 0; j < numbers.length; j++) {
            for (int i = 0; i < numbers[j].length; i++) {
                if (numbers[j][i] < minValue ) {
                    minValue = numbers[j][i];
                }
            }
        }
        return minValue ;
    }
}

原文由 Pavel S. 发布,翻译遵循 CC BY-SA 3.0 许可协议

我有一个使用 Java 8 的更有趣的解决方案 :)

 IntSummaryStatistics stats = Arrays.stream(data).flatMapToInt(Arrays::stream).collect(Collectors.summarizingInt(Integer::intValue));
int max = stats.getMax();
int min = stats.getMin();

显然,这是与您不同的解决方案。但它做同样的事情。首先,我们将二维数组转换为 Streamint s。为此,我们首先需要调用 flatMapToInt 。我们这样做是为了以一种扁平的方式流式传输数组中的所有元素。想象一下,如果我们只是开始使用单个索引来遍历整个二维数组。是这样的。一旦我们将数组转换为流,我们将使用 IntSummaryStatistics 以便为最小值和最大值重用相同的流。

原文由 Alexander Petrov 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题