Los ejemplos en este artículo comparten con usted el algoritmo de lotería Java para su referencia. El contenido específico es el siguiente
1. Análisis de algoritmo
Los premios se dividen en intervalos de acuerdo con la probabilidad. Cada intervalo representa un premio, y luego se dibuja un número aleatorio y el intervalo se verifica inversamente, que es el premio dibujado.
2. Código
Algoritmo de núcleo
aritmética de clase pública {// aumento de la estática privada final int mulriple = 1000000; Public int Pay (List <Reuse> Prices) {int LastScope = 0; // barajar, interrumpir la colección de pedidos de premios.shuffle (premios); MAP <Integer, int [] >> PRESCECOPES = new HashMap <Integer, int []> (); MAP <Integer, Integer> PreciCequantity = new HashMap <Integer, Integer> (); para (Precio del premio: Premios) {int PriceId = Price.getPrizeId (); // Intervalo de partición int CurrentsCope = LastScope + Price.getProbability (). Multiplicar (nuevo BigDecimal (Mulriple)). IntValue (); PRESCESCOPES.PUT (premio, nuevo int [] {LastScope + 1, CurrentsCope}); PriceQuantity.put (premio, precio.getQuantity ()); lastscope = CurrentsCope; } // Obtenga un número aleatorio entre 1-1000000 int Luckynumber = new Random (). NextInt (mulriple); int LuckyPrizeID = 0; // Encuentre el intervalo donde el número aleatorio se encuentra si ((null! = PrecisCopes) &&! Prizescopes.isEmpty ()) {set <entry <integer, int [] >> entrysets = precioscopes.entryset (); for (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; romper; }}} if (LuckyPrizeID> 0) {// Reduce el inventario de premios por un} return LuckyPrizeID; }} Premio al frijol
Premio de clase pública { / *** Etiqueta única para Premio* / Premio Premio Integer Premio; / *** Probabilidad de ganar*/ probabilidad privada de BigDecimal; / *** Número de premios*/ cantidad privada entero; Public Integer getPrizeID () {return premioid; } public void setPrizeId (Integer premio) {this.prizeID = premioD; } public bigDecimal getProbability () {probabilidad de retorno; } public void setProbability (probabilidad bigDecimal) {this.probability = probabilidad; } public Integer getQuTantity () {return Cantidad; } public void setQuantity (cantidad entera) {this.quantity = cantidad; }} 3. Prueba
Premio1 Probabilidad: 5%
Premio2 Probabilidad: 10%
Premio3 Probabilidad: 15%
Premio4 Probabilidad: 20%
Premio5 Probabilidad: 50%
Prueba de clase pública {public static void main (string [] args) {list <sure> premeditados = new ArrayList <Roor> (); Precio de premio1 = nuevo premio (); precio1.setPrizeId (1); Price1.setProbability (nuevo BigDecimal (0.05)); Price1.SetQuantity (1); Precio.Add (Premio1); Premio precio2 = nuevo premio (); Price2.setPrizeId (2); Price2.setProbability (nuevo BigDecimal (0.10)); Price2.setQuantity (10); Precio.Add (premio2); Precio de premio3 = nuevo premio (); Price3.setPrizeId (3); Price3.setProbability (nuevo BigDecimal (0.15)); Price3.SetQuantity (20); Precio.Add (Premio3); Premio precio4 = nuevo premio (); Price4.setPrizeId (4); Price4.setProbability (nuevo BigDecimal (0.20)); Price4.SetQuantity (50); Precio.Add (Premio4); Premio Price5 = nuevo premio (); Price5.SetPrizeId (5); Price5.SetProbability (nuevo BigDecimal (0.50)); Price5.Setquantity (200); Precio.Add (Premio5); int Price1GetTimes = 0; int Price2GetTimes = 0; int Price3gettimes = 0; int Price4gettimes = 0; int Price5GetTimes = 0; int Price5GetTimes = 0; Aritmética aritmética = nueva aritmética (); intimes = 1000; for (int i = 0; i <times; i ++) {int precioid = arithmetic.pay (premios); switch (premio) {Caso 1: Price1GetTimes ++; romper; Caso 2: Price2Gettimes ++; romper; Caso 3: Price3Gettimes ++; romper; Caso 4: Price4Gettimes ++; romper; Caso 5: Price5Gettimes ++; romper; }} System.out.println ("Número de lotería" + Times); System.out.println ("Premio1 gana" + premio1gettimes); System.out.println ("Premio2 gana" + premio2gettimes); System.out.println ("Premio3 gana" + premio3gettimes); System.out.println ("Premio4 gana" + premio4gettimes); System.out.println ("Premio5 gana" + Premio5gettimes); }} resultado:
A través de 1000 extracciones, podemos ver que la precisión del algoritmo sigue siendo muy alta.
Lo anterior es todo el contenido de este artículo. Espero que sea útil para el aprendizaje de todos y espero que todos apoyen más a Wulin.com.