2010-09-01 5 views
2

Je suis un java noob et j'ai cherché un peu d'aide pour créer cette application de loterie. J'ai lu quelques exemples sur ce site mais une partie du code était un peu trop avancée pour que je puisse l'implémenter (je ne sais pas comment fonctionne O (n)?) Alors j'ai pensé que j'avais posé ma question pendant que je regardais pour les réponses.créer une petite application de loterie, java

J'ai besoin de créer une application vraiment simple qui génère 3 nombres aléatoires et les compare avec 3 suppositions d'utilisateur. Les chiffres sont tous à un chiffre, mais ils peuvent être répétés. Par exemple, les chiffres réels peuvent être 1, 1, 1 et l'utilisateur peut avoir deviné 1, 2, 3 mais le prix en argent ne correspondra qu'à 1 que l'utilisateur devine avec 1 dans le nombre réel pour un seul match.

J'ai juste besoin de comparer 2 tableaux je suppose et de tenir compte des chiffres répétitifs. J'ai essayé de créer des instructions imbriquées, mais il y a une vingtaine de prémutations et cela devient incontrôlable. Que ferait un pro?

Merci pour toute aide

+0

O (n) est grande notation O: http://en.wikipedia.org/wiki/Big_O_notation – Powerlord

+0

Pourrait-on voir quelques exemples de gagner devine, et perd des suppositions? – jjnguy

+0

Oui, je suis un peu perplexe parce qu'il y a beaucoup de gains potentiels à gagner.Un seul match est un nombre qui correspond aux deux groupes; l'ordre n'a pas d'importance (ex 112, 233 ou 187, 843) un twomatch est la même idée avec 2 chiffres correspondants; l'ordre n'a pas d'importance (ex 234, 364 ou 333, 393) et un trio est le même avec 3 numéros correspondants (ex 123, 321 ou 979, 799) –

Répondre

0

C'est ce que je pense que vous chercher dans votre code de base

public class Lottery{ 
    public boolean isWinner(ArrayList<?> user, ArrayList<?> lotto){ 

      if(user == null || lotto == null) 
       return false; 
      if(user.size() == 0 || lotto.size() == 0) 
       return false; 

      return lotto.containsAll(user); 
     } 
} 

Il utilise ArrayLists de tout type, et utilise la fonctionnalité containsAll existante().

Ce serait facile à installer

Lottery lottery = new Lottery(); 
ArrayList<Integer> userOne = new ArrayList<Integer>(); 
ArrayList<Integer> lotto = new ArrayList<Integer>(); 

userOne.add(/*Some int value*/); //do this XX number of times as needed 
lotto.add(/*Some int value*/); //do this XX number of times as needed 

lottery.isWinner(userOne, lotto); 

modifier Cela fonctionne dans le cas de loto = {3,3,3} utilisateur = {} 1,3,8, mais les pauses si vous swap nombres: loto = {1,3,8}, utilisateur = {3,3,3}. Si vous connaissez les tailles seront toujours les mêmes, vous pouvez essayer

if(lotto.containsAll(user)){ 
    return user.containsAll(lotto); 
} 
return false; 
0

Vous devez mettre vos numéros dans une classe de collection comme List (doublons) ou permis Set (pas de doublons ici). Ensuite, vous pouvez utiliser les méthodes existantes ou equals() pour rechercher des correspondances.

+0

Ooh, quelle est la limite pour la recherche constante de valeurs primitives autoboxées? –

2

Eh bien, pour voir si un tableau contient au moins un élément d'un autre tableau, je ferais ce qui suit:

int[] actualNums; 
int[] guesses; 

for (int i = 0; i < actualNums.length; i++) { 
    for (int j = 0; j < guesses.length; j++) { 
     if (actualNums[i] == guesses[j]) { 
      // if you are here, you have found at least one match. 
     } 
    } 
} 
+0

Oui, cela aiderait à vérifier pour 1 match, mais comment puis-je savoir quel index correspondait si j'avais une estimation répétitive comme 112 et le nombre réel était 123. Il me dirait que j'ai un match quelque part, mais je ne sais pas quel indice il était que je devrais encore passer par et vérifier tous les résultats possibles. Quel est le moyen le plus efficace de le faire? –

+0

@Mateen, eh bien, vous pouvez enregistrer les indices auxquels vous avez trouvé le match. (Si je trouve un peu de temps, je mettrai à jour ma réponse) – jjnguy

+0

oui c'est ce que je dois faire pour m'assurer que je ne compare pas les valeurs répétées. J'apprécierais vraiment si vous avez du temps supplémentaire: D –

1

Si je vous étais, j'utiliser la classe java.util.Random. Dans votre cas, vous le faites fonctionner comme ça. Commencez par importer la classe Random.

import java.util.Random; 

Ensuite, créez un tableau d'entiers aléatoires 0-9.

int[] randomNums; 
Random generator = new Random(); //instance of a Random object 
for(int i = 0; i < 3; i++) { 
    randomNums[i] = generator.nextInt(10); //nextInt method gives int 0-9 
} 

Pour le tableau entré par l'utilisateur, suivez un processus similaire, sauf en utilisant des arguments. Ensuite, vous pouvez parcourir les tableaux ensemble et voir s'ils correspondent. Si vous faites ce que je pense que vous faites, vous devrez utiliser des boucles imbriquées for (deux d'entre eux, pour être précis).

+0

Générateur aléatoire = nouveau Aléatoire(); J'ai oublié "nouveau". –

+0

Je ne pouvais pas simplement utiliser Math.random() pour générer des nombres aléatoires et les mettre dans un tableau? –

+0

Depuis le JavaDoc - public int nextInt (int n): Renvoie une valeur pseudo-aléatoire uniformément distribuée entre 0 (inclus) et la valeur spécifiée (exclusive), tirée de la séquence du générateur de nombres aléatoires - Le code tel qu'écrit retournerait les valeurs de 0 à 8 et ne retourneraient pas 9. 'generator.nextInt (10)' retournerait des valeurs entre 0 et 9 – barrowc

Questions connexes