2015-09-01 33 views
-2

我這個叫numList整數數組具有Java的多維數組和整數出現

[4, 4, 3, 3, 3, 2, 1, 1, 1, 1, -1, -12, -12, -12, -12] 

我想創建一個多維數組可以存儲

enter image description here

其中左邊表示數字和右側確定發生次數。

我試過的嘗試...我無處可去。

 // Declaring the new multi-dimensional array. 
    int [] [] newArray = new int [6] [2]; 

    // Counter 3. 
    int counter3 = 0; 

    // Get first occurrence.  
    while (numList[counter3] < numList.length){ 



     for (int counter3:numList){ 
      newArray[] ([counter3]++); 


     } 
+4

好的,你的任何嘗試? –

+4

偉大的故事兄弟。你的問題在哪裏? – Manu

+0

請發佈您的最新失敗嘗試,獨立解決此問題。 – dasblinkenlight

回答

0

假設你的號碼是爲了,因爲它們在你的榜樣numList,那麼你可以這樣做:

int[] numList = { 4, 4, 3, 3, 3, 2, 1, 1, 1, 1, -1, -12, -12, -12, -12 }; 
int[][] newArray = new int[6][2]; 
int index = 0; 

for (int i = 0; i < numList.length;) { 
    int count = 0; 
    for (int x = 0; x < numList.length; x++) 
     if (numList[x] == numList[i]) count++; 
    newArray[index][0] = numList[i]; 
    newArray[index][1] = count; 
    index++; 
    i += count; 
} 
for (int x = 0; x < newArray.length; x++) { 
    for (int i = 0; i < newArray[0].length; i++) 
     System.out.print(newArray[x][i] + " "); 
    System.out.println(); 
} 

這樣,你不必應付進口在其他的答案(和這個更短),但是這隻適用於你訂購了數字。雖然有一些很好的排序算法。

編輯:我改變它,以便它可以以任何大小的任何順序的數字。

int[] numList = { 6, 6, 5, 5, 4, 4, 3, 2, 1, 1, 1, 7, 6, 5, 7, 8, 65, 65, 7 }; 
int[][] newArray = new int[1][2]; 
int index = 0; 
for (int i = 0; i < numList.length;) { 
    try { 
     int count = 0; 
     boolean isUnique = true; 
     for (int x = 0; x < i; x++) 
      if (numList[x] == numList[i]) { 
       isUnique = false; 
       break; 
      } 
     if (isUnique) { 
      for (int x = 0; x < numList.length; x++) 
       if (numList[x] == numList[i]) count++; 
      newArray[index][0] = numList[i]; 
      newArray[index][1] = count; 
      index++; 
     } 
     i++; 
    } catch (ArrayIndexOutOfBoundsException e) { 
     int tmpArray[][] = newArray; 
     newArray = new int[tmpArray.length + 1][tmpArray[0].length]; 
     for (int row = 0; row < tmpArray.length; row++) 
      for (int col = 0; col < 2; col++) 
       newArray[row][col] = tmpArray[row][col]; 
    } 
} 
for (int x = 0; x < newArray.length; x++) { 
    for (int i = 0; i < newArray[0].length; i++) 
     System.out.print(newArray[x][i] + " "); 
    System.out.println(); 
} 

所以,在這一點上,使用其他答案的地圖可能會更短。我的第二個答案的唯一好處,不用擔心進口。

+0

我做了一個System.out.println(數組。的toString(newArray)); [[I @ 63ce0e18,[I @ 6cff7cd8,[I @ 795d80cf,[I @ 69b3d448,[I @ 1d35f92f,[I @ 427a8ba4])被退回。 –

+0

這是因爲這是newArray中每個數組的標識符。我更新了代碼以正確顯示它。 – 17slim

+0

感謝它現在的工作。真棒!即時通訊試圖分析和學習的東西。 –

0
private Map<Integer, Integer> segregateArray(List<Integer> list) { 
    Map<Integer, Integer> result = new HashMap<>(); 
    for (Integer i : list) { 
     if (result.containsKey(i)) { 
      result.put(i, result.get(i) + 1); 
     } else { 
      result.put(i, 1); 
     } 
    } 
    return result; 
} 

這應該工作。如果您仍然需要返回數組使用:

private int[][] segregateArray(int[]list) { 
    Map<Integer, Integer> resultHelper = new HashMap<>(); 
    for (int i : list) { 
     if (resultHelper.containsKey(i)) { 
      resultHelper.put(i, resultHelper.get(i) + 1); 
     } else { 
      resultHelper.put(i, 1); 
     } 
    } 
    int[][] result = new int[resultHelper.size()][2]; 
    int arrayIterator=0; 
    for(Integer key : resultHelper.keySet()) 
    { 
     result[arrayIterator][0]=key; 
     result[arrayIterator][1]=resultHelper.get(key); 
     arrayIterator++; 
    } 
    return result; 
} 
+0

我需要導入任何東西嗎? –

+0

import java.util.HashMap; import java.util.Map; – graczun

+0

感謝您的努力。我一直在嘗試,因爲你張貼。作爲一個新手,這是我應該用來調用你的方法嗎? 在主要方法(或任何你想使用它的地方)中,我確實更改了(int [] numList)和(int i:numList) –

0

在現實生活中的項目,你可能應該避免使用低級別陣列機制實現的功能類似這樣的自己(自己添加了廣泛的測試套件,並沒有你?:)並選擇一個可用的庫。

在Java 8中,使用類似於此處所述的閉包,可以很好地完成此操作:Count int occurrences with Java8

在Java 7和更早版本中,我將使用Guava之類的集合庫之一,其中包含一個Multiset集合,可以提供您正在處理的內容。