2013-10-30 41 views
0

我有一個關於數組的非常普遍的問題。這是一個骰子滾動遊戲,我不得不做的功課。Java Array中元素的倍數

我有一個長度爲7的數組,其中包含了我的各種骰子滾動方法的結果,我需要找出數組是否包含多個元素實例,該元素是什麼,以及它有多少次發生。作爲Java的新手,我甚至不知道在哪裏尋找一種方法來做這種事情。有沒有人知道我可以找到一個,或者更好,但如何自己寫一個提示?

對我來說,最困難的部分之一就是我不知道我會得到多少結果,因爲可能會有多達兩對和一個三重奏。 IE int [] roll = {3,3,4,4,5,5,5}。我認爲解決這個問題的最好方法是使用一個循環,直到我的多個查找方法失敗,每次刪除匹配的元素。

非常感謝任何幫助,這是在午夜!

+0

這取決於,結果是否總是排序? – MadProgrammer

+0

@MadProgrammer請儘可能正確拼寫「it」。 – tbodt

+0

你是在滾動一個單面的六面模還是一對六面的面? (結果是1-6還是2-12?) – nhgrif

回答

1

通常的做法是使用一個Map累積頻率:

int[] roll = { 3, 3, 4, 4, 5, 5, 5 }; 

Map<Integer, Integer> counts = new HashMap<>(roll.length); 

for (int a : roll) 
    counts.put(a, counts.containsKey(a) ? counts.get(a) + 1 : 1); 

for (Entry<?, Integer> e : counts.entrySet()) 
    if (e.getValue() > 1) 
     System.out.println(e.getKey() + "\t" + e.getValue()); 
 
3 2 
4 2 
5 3 

第一列是骰子輥和第二列是頻率。

+0

這看起來不錯,謝謝。有沒有辦法訪問地圖中的數字?如在,將輸出分配給稍後使用的變量? –

+0

@ user2812871您可以使用'counts.get(n)'來獲取數字'n'的頻率。另外,如果這個答案對你有幫助,你可以考慮[接受它](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work/5235#5235)。 – arshajii

0
int[7] rollCounts = {0}; 
for(int i=0; i<roll.length; ++i) 
    rollCounts[roll[i]]++; 

使用這種方法,rollCounts[1]將包含1出現的計數roll[],並rollCounts[2]將包含在roll[]2出現的次數(rollCounts[0]應始終0假設roll[i]從未包含0,它不應該)。

然後,您可以使用一些邏輯,在不同的for循環中檢查rollCounts[i],根據出現次數執行您需要執行的任何操作。

而且說實話,你可以只保存你的擲骰這個數組中,除非它跟蹤輥發生的順序是非常重要的。

0

你不應該使用這個陣列中。最好使用的是Map<Integer, Integer>。鍵是數字,值是發生次數。這裏的示例代碼跟蹤的數字是這樣的:

Map<Integer, Integer> numbers = new Map<Integer, Integer>(); 
public void addNumber(int n) { 
    if (numbers.get(n) == null) 
     numbers.set(n, 0); 
    int count = numbers.get(n); 
    numbers.set(n, count + 1); 
} 

public int countForNumber(int n) { 
    if (numbers.get(n) == null) 
     return 0; 
    return numbers.get(n); 
} 
0
int[] arr = { 2, 2, 4, 4, 4, 6, 6, 6, 6 }; // Can have any length. 
Map<Integer, Integer> elemCount = new HashMap<Integer, Integer>(); 
Integer count = 0; 
for (int element : arr) 
{ 
    count = elemCount.get ((Integer) element); 
    if (count == null) 
    { 
     count = 1; 
    } 
    else 
    { 
     count++; 
    } 
    elemCount.put ((Integer) element , (Integer) count); 
} 
System.out.println (elemCount.toString());