Les exemples de cet article partagent avec vous l'algorithme de loterie Java pour votre référence. Le contenu spécifique est le suivant
1. Analyse d'algorithme
Les prix sont divisés en intervalles en fonction de la probabilité. Chaque intervalle représente un prix, puis un nombre aléatoire est dessiné et l'intervalle est vérifié inversé, qui est le prix tiré.
2. Code
Algorithme de base
classe publique arithmétique {// Magnification finale statique privée int mulriple = 1000000; public int Pay (list <script> pricings) {int lastScope = 0; // mélanger, perturber les collections de commandes de prix. Map <Integer, int [] >> Pricecopes = new hashmap <Integer, int []> (); Map <Integer, Integer> PritingSquantity = new HashMap <Integer, Integer> (); pour (prix de prix: prix) {int prixid = prix.getPrizeId (); // intervalle de partition int CurrentScope = LastScope + Price.getProbability (). Multiply (new BigDecimal (Mulriple)). IntValue (); PriceScopes.put (Prized, new int [] {LastScope + 1, CurrentScope}); PriceQuantity.put (Prized, Price.getquantity ()); LastScope = CurrentScope; } // Obtenez un nombre aléatoire entre 1-1000000 int luckYnumber = new Random (). NextInt (Mulriple); int LuckyPrizeId = 0; // Trouvez l'intervalle où le nombre aléatoire est situé if ((null! = PRIXCOpes) &&! Prizescopes.iSempty ()) {set <entrée <Integer, int [] >> EntrySetS = Pricecopes.EntrySet (); pour (map.entry <Integer, int []> m: entrySets) {int key = m.getKey (); if (LuckyNumber> = M.GetValue () [0] && luckyNumber <= m.getValue () [1] && pricequantity.get (key)> 0) {LuckyPrizeId = key; casser; }}} if (LuckyPrizeId> 0) {// Réduisez l'inventaire des prix par un} return LuckyPrizeId; }} Haricot
Prix de classe publique {/ ** * Étiquette unique pour le prix * / private Integer PrizeId; / ** * Probabilité de gagner * / Probabilité privée de BigDecimal; / ** * Nombre de prix * / quantité entière privée; public Integer getPrizeId () {return PrizeId; } public void setPrizeId (Integer PrizeId) {this.prizeId = Prized; } public bigdecimal getprobability () {return probabilité; } public void setProbability (bigdecimal probability) {this.probability = probability; } public Integer getQuantity () {return Quantity; } public void setquantity (quantité entière) {this.quantity = quantité; }} 3. Test
Prix1 Probabilité: 5%
Prix2 Probabilité: 10%
Prix3 Probabilité: 15%
Prix4 Probabilité: 20%
Prix5 Probabilité: 50%
Test de classe publique {public static void main (string [] args) {list <swear> pricings = new ArrayList <Script> (); Prix Prix1 = nouveau prix (); prix1.setprizeId (1); Price1.Set Probability (nouveau BigDecimal (0,05)); Price1.setquantity (1); Prix.Add (Prize1); Prix Prix2 = nouveau prix (); Price2.SetPrizeId (2); Price2.Set Probability (nouveau BigDecimal (0,10)); Price2.Setquantity (10); prix.add (prix2); Prix Prix3 = nouveau prix (); prix3.setprizeId (3); Price3.Set Probability (nouveau BigDecimal (0,15)); prix3.setquantity (20); Prix.Add (Prize3); Prix Prix4 = nouveau prix (); Price4.SetPrizeId (4); Price4.Set Probability (nouveau BigDecimal (0,20)); Price4.Setquantity (50); Prix.Add (Prix4); Prix Prix5 = nouveau prix (); Price5.SetPrizeId (5); Price5.Set Probability (nouveau BigDecimal (0,50)); Price5.Setquantity (200); Prix.Add (Prize5); int price1getTimes = 0; int price2getTimes = 0; int price3getTimes = 0; int price4getTimes = 0; int price5getTimes = 0; int price5getTimes = 0; Arithmétique arithmétique = nouvel arithmétique (); INT TIMES = 1000; for (int i = 0; i <times; i ++) {int prixId = arithmetic.pay (prix); switch (Prized) {cas 1: Price1getTimes ++; casser; Cas 2: Price2getTimes ++; casser; Cas 3: Price3getTimes ++; casser; Cas 4: Price4getTimes ++; casser; Cas 5: Price5getTimes ++; casser; }} System.out.println ("Nombre de loterie" + fois); 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); }} résultat:
Grâce à 1000 extractions, nous pouvons voir que la précision de l'algorithme est encore très élevée.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.