이 기사의 예는 귀하의 참조를위한 Java Lottery 알고리즘을 공유합니다. 특정 내용은 다음과 같습니다
1. 알고리즘 분석
상은 확률에 따라 간격으로 나뉩니다. 각 간격은 상을 나타내고, 무작위 숫자가 그려지고 간격이 리버스 점검되며, 이는 상을 수상합니다.
2. 코드
핵심 알고리즘
공개 클래스 산술 {// 배율 개인 정적 최종 int mulriple = 10000000; public int pay (list <creat> pricings) {int lastscope = 0; // 셔플, 상금 컬렉션을 방해합니다. Shuffle (상); Map <integer, int [] >> pricecopes = new Hashmap <integer, int []> (); 지도 <정수, 정수> precitedquantity = new Hashmap <정수, 정수> (); for (상 가격 : 상) {int priceid = price.getPrizeId (); // 파티션 간격 int currentscope = lastscope + price.getProbability (). 곱하기 (new bigdecimal (mulriple)). intvalue (); priceCopes.put (prizeId, new int [] {lastscope + 1, furrentscope}); pricequantity.put (priceId, price.getquantity ()); LastScope = CurrentsCope; } // 1-1000000 사이에 난수를 얻습니다 int luckynumber = new random (). nextInt (mulriple); int luckyprizeid = 0; // 임의의 숫자가 위치한 간격을 찾으십시오. for (map.Entry <integer, int []> m : entercess) {int key = m.getKey (); if (luckynumber> = m.getValue () [0] && luckynumber <= m.getValue () [1] && pricequantity.get (key)> 0) {luckyPrizeId = key; 부서지다; }}} if (luckyPrizeId> 0) {// 상품 인벤토리를 하나로 줄입니다} leguckPrizeId; }} 상금
공개 클래스 상 { / *** 상을위한 독특한 레이블* / 개인 정수 PrizeId; / *** 승리 확률*/ Private Bigdecimal 확률; / *** 상*/ 개인 정수 수량; 공개 정수 getPrizeId () {return PrizeId; } public void setPrizeId (Integer PrizeId) {this.prizeid = prizeId; } public bigdecimal getProbability () {반환 확률; } public void setProbability (bigdecimal 확률) {this.probability = 확률; } public integer getQuantity () {return retity; } public void setquantity (정수 수량) {this.quantity = 수량; }} 3. 테스트
Prize1 확률 : 5%
Prize2 확률 : 10%
Prize3 확률 : 15%
Prize4 확률 : 20%
Prize5 확률 : 50%
공개 클래스 테스트 {public static void main (String [] args) {list <creat> pricings = new Arraylist <상금> (); 상금 1 = 새로운 상 (); price1.setprizeid (1); price1.set -probability (New Bigdecimal (0.05)); 가격 1. 세트 Quantity (1); price.add (prize1); PRICE PRICE2 = 새로운 상 (); price2.setPrizeId (2); price2.setprobability (New Bigdecimal (0.10)); price2.setquantity (10); price.add (prize2); PRICE PRICE3 = 새로운 상 (); price3.setPrizeId (3); price3.SetProbability (New Bigdecimal (0.15)); price3.setquantity (20); price.add (prize3); PRICE 4 = 새로운 상 (); price4.setprizeid (4); price4.set -probability (New Bigdecimal (0.20)); price4.setquantity (50); price.add (prize4); 상금 5 = 새로운 상 (); price5.setprizeid (5); price5.set -probability (new bigdecimal (0.50)); price5.setquantity (200); price.add (prize5); 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 priceid = arithmetic.pay (상); 스위치 (prizeId) {사례 1 : price1getTimes ++; 부서지다; 사례 2 : price2getTimes ++; 부서지다; 사례 3 : price3getTimes ++; 부서지다; 사례 4 : price4gettimes ++; 부서지다; 사례 5 : price5getTimes ++; 부서지다; }} system.out.println ( "복권 수" + 시간); 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); }} 결과:
1000 개의 추출을 통해 알고리즘 정확도가 여전히 매우 높음을 알 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.