Os exemplos deste artigo compartilham com você o algoritmo de loteria Java para sua referência. O conteúdo específico é o seguinte
1. Análise de algoritmo
Os prêmios são divididos em intervalos de acordo com a probabilidade. Cada intervalo representa um prêmio e, em seguida, um número aleatório é desenhado e o intervalo é verificado reverso, que é o prêmio desenhado.
2. Código
Algoritmo central
classe pública aritmética {// ampliação privada estática final int mulriple = 1000000; public int pay (list <crize> preços) {int lastScope = 0; // embaralhar, interrompe as coleções de pedidos de prêmios. Mapa <Inteiro, int [] >> preçoscopes = new hashmap <Integer, int []> (); Mapa <Inteiro, Inteiro> PricingQuantity = new Hashmap <Inteiro, Integer> (); para (preço do prêmio: prêmios) {int priceId = price.getPrieDId (); // intervalo de partição int CurrentsCope = lastScope + price.getProbability (). Multiply (novo bigdecimal (mulriple)). IntValue (); preçoscopes.put (prêmio, novo int [] {lastScope + 1, CurrentsCope}); PriceQuantity.put (Prêmio, Price.getQuantity ()); lastScope = CurrentsCope; } // Obtenha um número aleatório entre 1-1000000 int luckynumber = new Random (). NextInt (mulriple); int luckyPrikeId = 0; // Encontre o intervalo em que o número aleatório está localizado se ((null! = Preçoscopes) &&! Prizescopes.isEmpty ()) {set <Entrada <Inteiro, int [] >> Entradas = preçoscopes.entryset (); para (map.entry <inteiro, int []> m: entradas) {int key = m.getKey (); if (luckynumber> = m.getValue () [0] && luckynumber <= m.getValue () [1] && pricequantity.get (key)> 0) {luckyPrieID = key; quebrar; }}} if (LuckyPrieD> 0) {// Reduza o inventário do prêmio por um} retornar LuckyPrieDID; }} Prêmio Bean
Public class Prêmio { / *** Rótulo exclusivo para prêmio* / Prêmio inteiro privado; / *** Probabilidade de ganhar*/ Private BigDecimal Probabilidade; / *** número de prêmios*/ quantidade inteira privada; public integer getPrieDId () {return prêmio; } public void SetPrieDId (Integer PRIZEID) {this.PrieDID = prêmio; } public bigDecimal getProbability () {retorna probabilidade; } public void SetProbability (probabilidade bigdecimal) {this.probability = probabilidade; } public integer getQuantity () {return Quantity; } public void setQuantity (quantidade inteira) {this.quantity = quantidade; }} 3. Teste
Prêmio1 Probabilidade: 5%
Prêmio 2 Probabilidade: 10%
Prêmio 3 Probabilidade: 15%
Prêmio4 Probabilidade: 20%
Prêmio 5 Probabilidade: 50%
public class Test {public static void main (string [] args) {list <cretke> preceamentos = new ArrayList <Cree> (); Prêmio preço1 = novo prêmio (); price1.setPrieDId (1); Price1.setProbability (novo BigDecimal (0,05)); Price1.setquantity (1); preços.add (prêmio1); Prêmio preço2 = novo prêmio (); price2.setPrikeId (2); Price2.SetProbability (novo BigDecimal (0,10)); Price2.setquantity (10); preços.add (prêmio2); Prêmio preço3 = novo prêmio (); Price3.SetPrateID (3); Price3.faseProbability (novo BigDecimal (0,15)); Price3.Setquantity (20); preços.add (prêmio3); Prêmio preço4 = novo prêmio (); Price4.SetPrateId (4); Price4.faseProbability (novo BigDecimal (0,20)); Price4.setquantity (50); preços.add (prêmio4); Prêmio preço5 = novo prêmio (); price5.setPrikeId (5); price5.setProbability (novo bigdecimal (0,50)); Price5.setquantity (200); preços.add (prêmio5); int price1getTimes = 0; int price2getTimes = 0; int price3getTimes = 0; int price4getTimes = 0; int price5getTimes = 0; int price5getTimes = 0; Aritmética aritmética = novo aritmensal (); int times = 1000; for (int i = 0; i <vezes; i ++) {int priceId = arithmetic.pay (prêmios); Switch (prêmio) {Caso 1: Price1GetTimes ++; quebrar; Caso 2: Price2GetTimes ++; quebrar; Caso 3: Price3GetTimes ++; quebrar; Caso 4: Price4GetTimes ++; quebrar; Caso 5: Price5GetTimes ++; quebrar; }} System.out.println ("Número da loteria" + vezes); System.out.println ("prêmio1 ganha" + prêmio1getTimes); System.out.println ("prêmio2 ganha" + prêmio2getTimes); System.out.println ("prêmio3 ganha" + prhe3getTimes); System.out.println ("prêmio4 ganha" + prhe4GetTimes); System.out.println ("prêmio5 ganha" + prêmio5getTimes); }} resultado:
Através de 1000 extrações, podemos ver que a precisão do algoritmo ainda é muito alta.
O exposto acima é todo o conteúdo deste artigo. Espero que seja útil para o aprendizado de todos e espero que todos apoiem mais o wulin.com.