Примеры в этой статье делятся с вами алгоритмом лотереи Java для вашей ссылки. Конкретный контент заключается в следующем
1. Анализ алгоритма
Призы делятся на интервалы в соответствии с вероятностью. Каждый интервал представляет собой приз, а затем нарисовано случайное число, и интервал проверяется обратно, что является натянутым призом.
2. Код
Основной алгоритм
открытый класс арифметика {// увеличение частного статического окончательного окончания int mulriple = 1000000; public int pay (List <pize> phicings) {int lastscope = 0; // перетасовать, разрушить коллекции призовых заказа. Шолфель (призы); Map <Integer, int [] >> Ценой Компания = новый Hashmap <Integer, int []> (); Map <Integer, Integer> Pricequantity = новый Hashmap <Integer, Integer> (); Для (цена призов: призы) {int pryation = pright.getpriziad (); // интервал раздела int currentscope = lastscope + price.getProbability (). Умножение (новый BigDecimal (mulriple)). Intvalue (); Ценой Copes.put (QuistId, New Int [] {LastScope + 1, CurrentScope}); pricequantity.put (aziad, price.getquantity ()); LastScope = CurrentScope; } // Получить случайное число между 1-1000000 int luckynumber = new random (). Nextint (mulriple); int luckyprizeid = 0; // Найти интервал, где случайное число расположено, если (null! 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; перерыв; }}} if (luckyPrizeid> 0) {// уменьшить инвентаризацию призов одним} return LuckyPrizeID; }} Призовой бобы
Приз общественного класса { / *** Уникальный лейбл для приза* / private Integer PrizeID; / *** Вероятность победы*/ частная большая вероятность; / *** Количество призов*/ частное целочисленное количество; public integer getprizeid () {return azryid; } public void setPrizeId (Integer PrizeId) {this.priziD = QuareId; } public bigdecimal getProbability () {вероятность возврата; } public void setProbability (BigDecimal вероятность) {this.probability = вероятность; } public integer getQuantity () {return Количество; } public void setquantity (целочисленное количество) {this.quantity = количество; }} 3. тест
Приз1 вероятность: 5%
Приз2 вероятность: 10%
Приз3 Вероятность: 15%
Приз4 Вероятность: 20%
Приз5 вероятность: 50%
открытый тест класса {public static void main (string [] args) {list <ais> pricings = new ArrayList <aze> (); Цена призов1 = новый приз (); цена1.setPriziD (1); цена1.setProbobility (новый BigDecimal (0,05)); цена1.setquantity (1); цены. Адд (приз1); Цена призов2 = новый приз (); цена2.setPriziD (2); цена2.setProbobility (новый BigDecimal (0,10)); цена2.setquantity (10); цены. Адд (приз2); Цена призов3 = новый приз (); PROCE3.SetPriziD (3); PROCE3.SETProbability (новый BigDecimal (0,15)); цена3.setquantity (20); цены. Адд (приз3); Призовой цена4 = новый приз (); PRICE4.SetPriziD (4); цена4.SetProbobility (новый BigDecimal (0,20)); цена4.setquantity (50); цены. Адд (приз4); Цена призов5 = новый приз (); цена5.SetPriziD (5); PROCE5.SETPROBLOBAILE (новый BigDecimal (0,50)); цена5.setquantity (200); цены. Адд (приз5); int price1gettimes = 0; int price2gettimes = 0; int price3gettimes = 0; int price4gettimes = 0; int price5gettimes = 0; int price5gettimes = 0; Арифметическая арифметика = новая арифметика (); int times = 1000; for (int i = 0; i <times; i ++) {int pryation = arithmetic.pay (призы); Switch (QuareId) {Case 1: Price1getTimes ++; перерыв; Случай 2: цена2gettimes ++; перерыв; Случай 3: цена3gettimes ++; перерыв; Случай 4: цена4gettimes ++; перерыв; Случай 5: цена5gettimes ++; перерыв; }} System.out.println ("количество лотереи" + times); System.out.println ("Приз1 выигрывает" + приз1GETTIMES); System.out.println («Призых 2 побед» + приз2GETTIMES); System.out.println ("Приз3 выигрывает" + призму3gettimes); System.out.println ("Приз4 выигрывает" + приз4gettimes); System.out.println ("Приз5 побед" + приз5gettimes); }} результат:
Через 1000 экстракций мы видим, что точность алгоритма все еще очень высока.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.