2016-07-09 190 views
0

我一直在試圖弄清楚這一點,需要一些幫助。我需要找到最小值/最大值並將它們打印出來用於多維數組。以下是我嘗試過的兩種方法。在Java 2D數組中尋找最小值和最大值

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

這個版本只是在編譯時引發了一堆錯誤。任何幫助是極大的讚賞。

+0

能否請您縮進代碼正確 – Li357

+2

在每一種情況下,你似乎忽略了你有一個陣列的陣列-的-INT的事實。考慮如何迭代訪問'data'中每個'int []'數組中的每個'int'。 –

+0

哪個版本的Java合法化方法裏面的方法裏面的方法? – bcsb1001

回答

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

哦,好吧,我明白了。非常感謝!我一直在用這種方法拉我的頭髮 – Fancierwhale

1

我有使用Java 8 :)

IntStream stream = Arrays.stream(data).flatMapToInt(Arrays::stream); 
int max = stream.max().getAsInt(); 
int min = stream.min().getAsInt(); 

它比你的不同的解決方案,顯然是一個更有趣的解決方案。但它做同樣的事情。首先,我們將2D陣列轉換成Streamint s。首先我們需要撥打flatMapToInt。我們這樣做是爲了以平坦的方式流式傳輸數組中的所有元素。想象一下,如果我們開始使用單個索引來遍歷整個2D數組。這是這樣的。一旦我們轉換的陣列到一個流,找到最小和最大的元素變成一塊蛋糕:)的

+1

方法引用很有趣:'x - > Arrays.stream(x)'可以簡化爲'Arrays :: stream'。 – bcsb1001

+0

是啊:)我仍在學習:P Thnx! –

+0

你知道我覺得很有趣。一旦我開始做Java8的事情,有些東西只是太簡單了,而且需要的代碼少得多。我想知道在Java 8之前我們是如何編碼的? –

0

您的問題是:正在排序int陣列的陣列,而不是分選在每各單獨intint數組。

解決此問題:循環遍歷每個int陣列中的int陣列。

說明書查找使用Arrays.sort()二維int陣列的最大和最小:

  1. 聲明一個2D int數組進行排序稱爲data
  2. 聲明兩個int s,一個保存最大值,另一個最小值。
    • 最大值的初始值應爲Integer.MIN_VALUE,最小值的初始值應爲Integer.MAX_VALUE以確保處理負值。
  3. 遍歷data0data.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); 
    } 
} 
+0

我能夠弄清楚如何使用一維數組來找到這些值,這要感謝關於如何爲二維數組聲明它的細節! – Fancierwhale