2011-04-09 6 views
2

J'écris une méthode qui prendrait les valeurs et le tableau et trouverait des doublons. S'il y a des doublons, comme par exemple deux valeurs ont la même valeur, je vais multiplier cette valeur par 2. Si deux valeurs ont la même valeur, je vais multiplier cette valeur par 3. Cela continuera jusqu'à ce que sept valeurs soient identiques. Je vais multiplier cette valeur par 7.Rechercher des doublons dans des tableaux

Ceci est mon code source.

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

Dans quelle langue l'écrivez-vous? Je suppose que c'est Java parce que vous avez utilisé "public static" en haut ... Hmm ... – alexy13

+0

C'est java. Cela m'a énervé toute la journée! –

+0

Je suis encore un peu confus au sujet de ce que vous essayez de faire. J'utilise ma logique, c'est peut-être mon malentendu. – alexy13

Répondre

1

Si l'ordre n'est pas important, vous devez trier d'abord, puis analyser. Le tri placera des valeurs identiques l'une à côté de l'autre, où vous pourrez les remarquer plus facilement dans une boucle for.

Les classes Java Collections peuvent également être utiles ici.

Voir par exemple http://download.oracle.com/javase/tutorial/collections/intro/index.html

Par exemple, si vous ne voulez pas trier d'abord et utiliser une boucle, vous pouvez utiliser un HashMap des classes de collections.

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

maintenant vous avez un mappeur de chiffres à compte, vous pouvez ensuite utiliser quelque chose comme max (counts.valueSet()) pour trouver le nombre maximum et ensuite en boucle à travers votre hachage pour voir quel numéro a fait que .

0

Si vous avez les mêmes valeurs à l'index 1, 4, 6, vous les trouverez avec

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

et ainsi de suite. Eh bien, vous le feriez - mais il n'y a pas so on, puisque vous revenez sur le premier coup:

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

Voulez-vous dire break?

0

Vous devriez fournir quelques exemples d'entrées et de sorties. On ne sait pas exactement quelle sortie vous attendez. Cherchez-vous simplement à trouver le plus de doublons, puis multipliez ce nombre par la fréquence qu'il apparaît? Par exemple:

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

Ou peut-être les deux 8 gagnent parce que leur total est 16? Ou allez-vous additionner tous les doublons? En tout cas, je commencerai par celui-ci où MAX_NUM est le nombre le plus élevé que vous attendez dans le tableau:

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

Vous avez maintenant les comptes de chaque numéro. Si vous cherchez le nombre avec le nombre le plus élevé:

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

maintenant num * best serait 15 pour mon exemple. Maintenant num contiendra le nombre qui se produit le plus et best sera le nombre pour cela. S'il y a deux nombres avec le même nombre, le plus grand nombre gagnera. Peut-être que dans mon exemple ci-dessus vous voulez 16 au lieu de 15 parce que les deux 8 ont plus de somme:

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

maintenant max aurait 16.

Questions connexes