中獎率 1%,每人抽 10 次,也就是說 10 個人就可以抽 100 次,概率上來說 10 個人必中獎?假設邏輯是這樣的,可以這樣設計:
成都創(chuàng)新互聯(lián)公司主營法庫網站建設的網絡公司,主營網站建設方案,重慶APP軟件開發(fā),法庫h5微信小程序搭建,法庫網站營銷推廣歡迎法庫等地區(qū)企業(yè)咨詢
1、先寫定義一個表示概率的數(shù)組 ratio,這個數(shù)組最多可以存 100 個數(shù)字,每個數(shù)字的值不能重復,范圍是 0 到 100,表示 100%。現(xiàn)在你的中獎率是 1%,那么就存一個數(shù)字。
2、定義一個是否中將的布爾型變量 win;
每次抽獎用隨機正整數(shù)對 100 取余,再將結果拿到 ratio 數(shù)組中查找,如果找到就將 win 賦值為 true,表示中獎。如果沒找到就對 win 賦值為 false,表示沒有中獎。
可以做到!用 Random 得到隨機的數(shù),再根據(jù)你的登陸人的身份 控制隨機的次數(shù)是多少!
例如:
1 - 20 為中獎, 普通就隨機出 10000個數(shù)。會員的話就隨機100個數(shù)就好了!
調試好了 直接用 public static void main(String[] args) { Random rand = new Random();//定義隨機數(shù)產生器 List list_One = new ArrayList();//定義一等獎數(shù)字集合 List list = null; //用list時 /*list = new ArrayList();//定義100個隨機數(shù) 集合 for(int i = 0; i 100;){//產生100個3位數(shù) 的隨機不重復數(shù)字 if(check(rand.nextInt(899) + 100,list)){ i++; } }*/ //用set時 Set set = new HashSet(); while(set.size() 100){ set.add(rand.nextInt(899) + 100); } list = new ArrayList(set); for(int k = 0; k 5;){//產生5個隨機一等獎 if(check(rand.nextInt(100),list,list_One)) k++; } } for(int a = 0; a list_One.size();a++){ System.out.println(list_One.get(a)); } } /** * 驗證該數(shù)字是否在集合中 * @param i * @param list * @return */ public static boolean check(int i,List list){ if(list.size() == 0){ list.add(i); }else{ for(int j = 0; j list.size(); j++){ if(i == list.get(j)){ return false; } } list.add(i); } return true; } /** * 抽取隨機數(shù)作為中獎的下標(重載) * @param i * @param list * @param list_One * @return */ public static boolean check(int i,List list,List list_One){ if(list.size() == 0){ list_One.add(list.get(i)); }else{ for(int j = 0; j list.size(); j++){ if(i == list.get(j)){ return false; } } list_One.add(list.get(i)); } return true; }