簡體   English   中英

在 Java 2D 數組中查找最小值和最大值

[英]Finding minimum and maximum in Java 2D array

我一直在努力解決這個問題,需要一些幫助。 我需要找到最小/最大值並將它們打印出來用於多維數組。 這是我嘗試過的兩種方法。

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

這個版本只是在編譯時給我帶來了一堆錯誤。 非常感謝任何幫助。

好的,我已經修復了你的代碼。 實際上你的錯誤是你沒有遍歷多維數組的所有單元格。

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

我有一個使用 Java 8 的更有趣的解決方案 :)

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

顯然,這與您的解決方案不同。 但它做同樣的事情。 首先,我們將 2D 數組轉換為intStream 為了首先做到這一點,我們需要調用flatMapToInt 我們這樣做是為了以扁平的方式流式傳輸數組中的所有元素。 想象一下,如果我們只是開始使用單個索引來遍歷整個 2D 數組。 就是這樣。 一旦我們將數組轉換為流,我們將使用 IntSummaryStatistics 以便為 min 和 max 重用相同的流。

您的問題是:您正在對int數組的數組進行排序,而不是對每個int數組中的每個單獨的int進行排序。

通過每個循環:為了解決這個int的陣列中的陣列int陣列。

使用Arrays.sort()查找 2D int數組的最大值和最小值的說明

  1. 聲明一個 2D int數組以對調用的data進行排序。
  2. 聲明兩個int ,一個保存最大值,另一個保存最小值。
    • 最大的初始值應該是Integer.MIN_VALUE和最小的初始值應該是Integer.MAX_VALUE ,以確保負值處理。
  3. 循環從0data.length data
    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); 
    }
}
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++) //coloum
            {
                if(a[i][j]>max)
                {
                    max=a[i][j];
                }
            }
        }
        System.out.println("maximum number is"+max);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM