Die Beispiele in diesem Artikel teilen Ihnen den Java -Lotterie -Algorithmus für Ihre Referenz. Der spezifische Inhalt ist wie folgt
1. Algorithmusanalyse
Die Preise werden gemäß der Wahrscheinlichkeit in Intervalle unterteilt. Jedes Intervall stellt einen Preis dar, und dann wird eine Zufallszahl gezogen und das Intervall wird umgekehrt geprüft, was der gezogene Preis ist.
2. Code
Kernalgorithmus
public class arithmetic {// Vergrößerung private statische endgültige int mulriple = 1000000; public int pay (list <prize> pricings) {int lastScope = 0; // Shuffle, stören Sie die Preisauftragssammlungen.Shuffle (Preise); Karte <Integer, int [] >> preisepreise = new HashMap <Integer, int []> (); Karte <Integer, Integer> PRECINGQUANTITY = New HashMap <Integer, Integer> (); für (Preis Preis: Preise) {int priceId = price.getPrizEID (); // Partitionsintervall int CurrentScope = lastScope + price.getProbability (). Multiplizieren (neuer BigDecimal (mulriple)). IntValue (); Preisecopes.put (prizeId, new int [] {lastScope + 1, CurrentScope}); pricequantity.put (prizeId, price.getQuantity ()); lastScope = currentScope; } // eine zufällige Zahl zwischen 1-1000000 int luckynumber = new random (). NextInt (mulriple); int LuckyPrizEID = 0; // finde das Intervall, in dem sich die Zufallszahl befindet, wenn ((NULL! = PREISECOPES) &&! Prizescopes.isempty ()) {set <Eintrag <Integer, int [] >> Einträge = pflecopes.entrySet (); für (map.entry <Integer, int []> m: Einträge) {int key = m.getKey (); if (luckynumber> = m.getValue () [0] && luckynumber <= m.getValue () [1] && pricequantity.get (Schlüssel)> 0) {LuckyPrizEID = Key; brechen; }}} if (LuckyPrizEID> 0) {// Reduzieren Sie das Preisinventar durch eins} zurück LuckyPrizEID; }} Preisbohne
public class Prize { / *** einzigartiges Label für Preis* / Private Integer Prize; / *** Wahrscheinlichkeit des Gewinns*/ privat BigDecimalwahrscheinlichkeit; / *** Anzahl der Preise*/ private Ganzzahlmenge; public Integer getPrizeid () {return prizeId; } public void setPrizeId (Integer prizeId) {this.PrizID = prizeId; } public bigDecimal getProbability () {Rückgabewahrscheinlichkeit; } public void setProbability (BigDecimalwahrscheinlichkeit) {this.Probability = Wahrscheinlichkeit; } public Integer getQuantity () {Rückgabemenge; } public void setQuantity (Ganzzahlmenge) {this.quantity = Menge; }} 3. Test
Preis1 Wahrscheinlichkeit: 5%
Preis2 Wahrscheinlichkeit: 10%
Prize3 Wahrscheinlichkeit: 15%
Prize4 Wahrscheinlichkeit: 20%
Prize5 Wahrscheinlichkeit: 50%
public class test {public static void main (String [] args) {list <prize> pricings = new ArrayList <prize> (); Preispreis1 = neuer Preis (); price1.setPrizeid (1); Price1.SetProbability (neue BigDecimal (0,05)); Price1.SetQuantity (1); Preise.Add (Preis1); Preispreis2 = neuer Preis (); price2.setPrizeid (2); price2.setProbability (neue BigDecimal (0,10)); price2.setQuantity (10); Preise.Add (Preis2); Preis preis3 = neuer Preis (); price3.setPrizeid (3); Price3.SetProbability (neuer BigDecimal (0,15)); Price3.SetQuantity (20); Preise.Add (Preis3); Preis Price4 = neuer Preis (); price4.setPrizeid (4); price4.setProbability (neue BigDecimal (0,20)); price4.setQuantity (50); Preise.Add (Prize4); Preispreis5 = neuer Preis (); price5.setPrizeid (5); Price5.SetProbability (neue BigDecimal (0,50)); Preis5.Setquantity (200); Preise.Add (Preis5); int price1gettimes = 0; int price2gettimes = 0; int price3gettimes = 0; int price4gettimes = 0; int price5gettimes = 0; int price5gettimes = 0; Arithmetische Arithmetik = neuer Arithmetik (); int Times = 1000; für (int i = 0; i <times; i ++) {int priceId = arithmetic.pay (preise); switch (prizeId) {case 1: price1gettimes ++; brechen; Fall 2: Price2gettzeit ++; brechen; Fall 3: Price3gettzeit ++; brechen; Fall 4: Price4gettimes ++; brechen; Fall 5: Price5GettTimes ++; brechen; }} System.out.println ("Anzahl der Lotterie" + mal); System.out.println ("Prize1 Wins" + Prize1GETTimes); System.out.println ("Prize2 Wins" + Prize2GetTimes); System.out.println ("Prize3 Wins" + Prize3GetTimes); System.out.println ("Prize4 Wins" + Prize4GetTimes); System.out.println ("Prize5 Wins" + Prize5GetTimes); }} Ergebnis:
Durch 1000 Extraktionen können wir sehen, dass die Genauigkeit der Algorithmus noch sehr hoch ist.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.