2011-04-09 111 views
2

我正在寫一個方法,將採取值和數組並找到重複。如果有重複,例如兩個值具有相同的值,那麼我會將該值乘以2。如果兩個值具有相同的值,則我將該值乘以3.這將繼續,直到如果七個值相同。我會將該值乘以7.查找重複數組

這是我的源代碼。

public static double calculateWinnings(int[]numbers) 

    { 
     double total = 0; 
     for (int i = 0; i < numbers.length - 1; i++) 
     { 
      for (int j = i + 1; j < numbers.length; j++) 
      { 
       if(numbers[i] == numbers[j]) 
       { 
        total = numbers[i] * .01; 
        System.out.println("Total is " + total); 
        return total; 
       } 
      } 
     } 
     return total; 

    } 
+0

你在寫什麼語言?我假設它是Java,因爲你在頂部使用「public static」...嗯... – alexy13 2011-04-09 02:48:19

+0

這是java。這一直困擾我整天! – 2011-04-09 02:49:47

+0

對於你想做什麼,我仍然有點困惑。我使用我的邏輯,也許這是我的誤解。 – alexy13 2011-04-09 02:52:37

回答

1

如果順序無關緊要,您應該先排序,然後再進行分析。

排序會將相同的值彼此相鄰,您可以在for循環中更輕鬆地注意到它們。

Java Collections類也可能在這裏使用。

例如見http://download.oracle.com/javase/tutorial/collections/intro/index.html

舉例來說,如果你不想先進行排序,並使用一個循環,你可以使用HashMap從集合類。

HashMap<Integer, Integer> counts = new HashMap<Integer, Integer>(); 
for(int i=0; i < numbers.length; ++i){ 
    Integer before = counts.get(numbers[i]); 
    if (before == null) before=0; 
    counts.put(numbers[i], before+1); 
} 

現在你必須從數字到計數 以後你可以使用像MAX(counts.valueSet())來查找最大計數 然後循環通過您的哈希,看看哪個號碼造成的一個映射器。

0

如果你有索引1,4,6相同的價值觀,你會發現它們與

i j conclusion 
-------------- 
1 4 2 values 
1 6 3 values 
4 6 4 values // oops! already counted 

等。那麼你會 - 但沒有so on,因爲你回報先打:

if(numbers[i] == numbers[j]) 
    { 
     total = numbers[i] * .01; 
     System.out.println("Total is " + total); 
     return total; // oops! 
    } 

你的意思是break

0

您應該提供一些示例輸入和輸出。目前還不清楚你期望的輸出。你只是想找到最重複的,然後乘以它出現的頻率的數字?例如:

1 2 5 5 5 7 8 8 = three 5's = 15  

或者也許兩個8的勝利,因爲他們總爲16?還是你要總結所有重複?在任何情況下,我這個開始,到哪裏MAX_NUM是您在陣列中期望最高的號碼:

int[] counts = new int[MAX_NUM]; 
for (int i = 0; i < numbers.length; i++) { 
    counts[numbers[i]]++; 
} 

現在你有每個數字的計數。如果您正在尋找具有最高計數的數量:

int num = 0; 
int best = 0; 
for (int i = 0; i < counts.length; i++) { 
    if (counts[i] > best) { 
     num = i; 
     best = counts[i]; 
    } 
} 

現在num * best將是15我的例子。現在num將包含發生次數最多的數字,而best將成爲它的數量。如果有兩個數字相同的數字,那麼較高的數字將勝出。也許,儘管我上面的例子,你要16而不是15,因爲這兩個8的有較大的總和:

int max = 0; 
for (int i = 0; i < counts.length; i++) { 
    max = Math.max(i * counts[i], max); 
} 

現在max將有16個。