2010-07-13 16 views
1

Ok donc je suis vraiment ennuyé et ont décidé de faire une chose de type calculatrice de loterie (oui je sais, je suis triste!)Java, loterie calculuator

Quoi qu'il en soit, je me demandais s'il y avait une méthode de bibliothèque java/classe pour l'élaboration des permutations/combinaisons. Je veux générer tous les ensembles de nombres possibles, qui ont 6 numéros de 1 à 49 sans répétitions

Si ce n'est pas disponible en tant que méthode pré écrite, quelle est la meilleure approche pour moi d'écrire le mien?

Merci

+0

Vous ne vivez pas en Allemagne, n'est-ce pas? ;) –

+0

non, angleterre! comment ça se passe? – Ricki

+0

loterie allemande a 1 - 49 numéros je pense .. mais il y a aussi d'autres pays ... – RoflcoptrException

Répondre

0

Google sur "permutations java" trouvé this.

Amusez-vous!

+0

hmmmm le plaisir semble avoir une double signification;) – Ricki

+0

Aucune infraction n'était prévue; vous avez indiqué que vous faisiez cela parce que vous vous ennuyez, c'est-à-dire "pour vous amuser". Personnellement, je pense qu'avoir la liste complète des permutations est exactement aussi précieux que de ne pas l'avoir, mais à chacun son propre! –

2

Ceci est ma deuxième réponse. Voici une approche stupide, mais facile à coder ce problème (en Java):

for (int i1=1; i1<45; i1++) { 
    for (int i2=i1+1; i2<46; i2++) { 
     for (int i3=i2+1; i3<47; i3++) { 
     for (int i4=i3+1; i4<48; i4++) { 
      for (int i5=i4+1; i5<49; i5++) { 
       for (int i6=i5+1; i6<50; i6++) { 
        System.out.format("%d %d %d %d %d %d\n", i1, i2, i3, i4, i5, i6); 
}}}}}} 
0

Si vous faites cela pour le plaisir, devriez-vous le faire pas à partir de zéro?

Avec des points supplémentaires pour le code imaginatif? On dirait une chance idéale d'essayer la récursivité.

Pensez

getPermitations (longueur) { résultat = nouveau vecteur tmp = getPermitations (taille-1)

for (i = 0 => 9) { pour (String s: tmp) { résultat.add (i + tmp); }}

}

Oui, je sais que n'est pas le code de travail, où est le plaisir à copier quelqu'un d'autre code de travail? Ensuite, jouez avec l'optimisation pour des points supplémentaires.

+0

Ou vous pourriez écrire quelque chose pour construire réellement l'arbre de probabilité complet, en créant un nouvel objet pour chaque possibilité. Je me demande si vous manquez de mémoire en premier! – Jon

3

Une estimation approximative:

49 * 48 * 47 * 46 * 45 * 44 = 10.068.347.520 

C'est la longueur d'une liste contenant toutes les combinaisons possibles. Notez que vous ne pouvez pas utiliser un ArrayList car il est protégé par un tableau et la taille maximale d'un tableau est limitée à Integer.MAX_VALUE. Même si vous utilisez byte tableaux pour stocker les dix milliards de combinaisons, vous devriez commencer à la machine virtuelle Java comme ceci:

java -Xmx250G my.little.LotteryGenerator 

(en supposant que vous avez suffisamment de mémoire à bord)

1

Désolé pour le code spaghetti et la désignation horrible variables (jusqu'à moi sommes restés trois heures une nuit) à écrire mon propre programme de loterie en Java, mais ici ya go

public static void LottoNumbers() 
     { 

      int zero=0; 
int one=0; 
int two=0; 
int three=0; 
int four=0; 
int five=0; 
int six=0; 
int bonus = 0; 
int bonusball=0; 
      ArrayList myNumbers = new ArrayList(); 
      Random random2 = new Random(); 

      ArrayList ResultsList = new ArrayList<results>(); 
      ArrayList numberList = new ArrayList(); 

      for (int outer = 0; outer < 140000001; outer++) 
      { 
       myNumbers.clear(); 
       for (int i = 1; i < 7; i++) 
       { 
        boolean a = true; 
        while(a) 
        { 
        int r = random2.nextInt(); 
        if (!myNumbers.contains(r)) { 
         myNumbers.add(random2.nextInt(49) +1); 
         a = false; 
        } 
        } 
       } 
       numberList.clear(); 
       for (int i = 1; i < 7; i++) 
       { 
        boolean a = true; 
        while (a) 
        { 


         Random random = new Random(); 
         int r = random.nextInt(49) +1; 
         if (!numberList.contains(r)) 
         { 
          numberList.add(r); 
          a = false; 
         } 
        } 
       } 
       Random random = new Random(); 
       boolean b = true; 
       while(b) 
       { 
       int bb = random.nextInt(49) +1; 
       if (!numberList.contains(bb)) 
       { 
        bonusball = bb; 
        b = false; 
       } 
       } 

       int matches = 0; 
       for (int u =0; u<numberList.size(); u++) 
       { 
        if (myNumbers.contains(numberList.get(u))) 
        { 
         matches++; 
        } 
       } 
       if (matches == 0) 
         zero++; 
        if (matches == 1) 
         one++; 
        if (matches == 2) 
         two++; 
        if (matches == 3) 
         three++; 
        if (matches == 4) 
         four++; 
        if (matches == 5) 
         five++; 
        if (matches== 5 && myNumbers.contains(bonusball)) 
         bonus++; 
        if (matches == 6) { 
         six++; 

          System.out.println("Jackpot! " + numberList.get(0) 
            +"," + numberList.get(1) 
            +"," + numberList.get(2) 
            +"," + numberList.get(3) 
            +"," + numberList.get(4) 
            +"," + numberList.get(5)); 
        } 


if (outer%500000==0) { 
         System.out.println("none: " + zero + " one: " + one + " two: " + two + " three: " + three + " four: " + four + 
         " five: " + five + " 5+bonus: " + bonus + " six: " + six + " total: " + outer); 
} 

ma théorie initiale était de courir 6 nombres aléatoires à un ensemble de 6 numéros choisis par moi-même. Mais j'ai trouvé le générateur de nombres aléatoires un peu incertain, 1, 2, 3, 4, 5, 6 gagnerait une fois par million, parfois plus!Mais j'ai alors décidé de générer aussi mes nombres aléatoirement et les résultats que j'ai trouvés étaient assez précis, du moins en ce sens qu'un ensemble gagnant (basé au Royaume-Uni) de 6 nombres apparaissait approximativement tous les 14 millions d'itérations.

J'ai été intrigué par l'idée que chaque combinaison devrait apparaître une fois sur 14 millions, et je voulais faire 140 millions de tirages et voir quels numéros étaient le plus élevés. J'ai abandonné quand j'ai réalisé quel mal de tête il serait stocker toutes ces données. Donc, je suis juste coincé dans certaines lignes d'impression pour produire des totaux (c.-à-5 matches) et tous les jackpots qui se sont produits. Pourrait m'aider à choisir quelques numéros ce week-end!

Avant que quiconque tire des coups de feu, je suis un programmeur nouveau et enthousiaste et nous savons qu'il est un peu un gâchis, mais son juste pour le fun :)

Edit: le programme vient de terminer sa boucle de 140millionth, et il y avait 10 jackpots!

+0

Maintenant, si seulement vous pouviez lier dans une vraie loterie, vous seriez un homme très riche;) – Leigh