在 Java 2D 数组中查找最小值和最大值

问题描述 投票:0回答:4

我已经尝试解决这个问题有一段时间了,需要一些帮助。我需要找到最小/最大值并将其打印为多维数组。这是我尝试过的两种方法。

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;
            }

这个版本只是在编译时给我带来了一堆错误。非常感谢任何帮助。

java arrays loops max min
4个回答
9
投票

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

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

显然,这与您的解决方案不同。但它做同样的事情。首先,我们将 2D 数组转换为

Stream
int
。为了首先做到这一点,我们需要调用
flatMapToInt
。我们这样做是为了以扁平的方式流式传输数组中的所有元素。想象一下,如果我们开始使用单个索引来迭代整个二维数组。就是这样的。一旦我们将数组转换为流,我们将使用 IntSummaryStatistics 以便为最小值和最大值重用相同的流。


5
投票

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

因此,我在 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 ;
    }
}

0
投票

您的问题是: 您正在对

int
数组的数组进行排序,而不是对每个
int
数组中的每个单独的
int
进行排序。

要解决此问题: 循环遍历

int
数组中的每个
int
数组。

使用 int

 查找 2D 
Arrays.sort()
 数组的最大值和最小值的说明

  1. 声明一个 2D
    int
    数组进行排序,称为
    data
  2. 声明两个
    int
    ,一个保存最大值,另一个保存最小值。
    • 最大值的初始值应为
      Integer.MIN_VALUE
      ,最小值的初始值应为
      Integer.MAX_VALUE
      ,以确保处理负值。
  3. data
    0
    循环遍历
    data.length
    1. 排序
      data[i]
    2. 检查
      data[i]
      的第一个值是否小于最小值,如果小于则更改。
    3. 检查
      data[i]
      的最后一个值是否大于最大值,如果是则更改。
  4. 输出你的结果。

示例:

import java.util.Arrays;

public class Main {
    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} };

        int maximum = Integer.MIN_VALUE;
        int minimum = Integer.MAX_VALUE;

        for(int i = 0; i < data.length; i++) {
            Arrays.sort(data[i]);

            if(data[i][0] < minimum) minimum = data[i][0];
            if(data[i][data[i].length - 1] > maximum) maximum = data[i][data[i].length - 1];
        }

        System.out.println("Minimum = " + maximum);  
        System.out.println("Maximum = " + minimum); 
    }
}

-2
投票
package array;

public class Max_number {
    
    // 2 5 7 9
    // 3 6 8 1
    
    public static void main (String[] arg) {
        int a[][] = {{2,5,7,9},{3,6,8,1}};
        int max=a[0][0];
        for (int i=0; i<2; i++)   // row
        {
            for (int j=0; j<4; j++) // column
            {
                if(a[i][j]>max)
                {
                    max=a[i][j];
                }
            }
        }
        System.out.println("maximum number is"+max);
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.