『壹』 java集五福活動概率技術如何實現
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Random;
/**
*抽獎工具類,概率和可以不等於1
*概率為百分數去掉百分號的部分,如10%,則為10
*抽獎操作如下:
*1.輸入抽獎概率集合,【抽獎概率集合為{10.0,20.0,30.0}】
*2.生成連續集合,【生成的連續集合為{(0.0,10.0],(10.0,30.0],(30.0,60.0]}】
*3.生成隨機數,【生成方法為random.nextDouble()*maxElement】
*4.判斷隨機數在哪個區間內,返回該區間的index【生成了隨機數12.001,則它屬於(10.0,30.0],返回index=1】
*
*/
publicclassLotteryUtil{
/**
*定義一個連續集合
*集合中元素x滿足:(minElement,maxElement]
*數學表達式為:minElement<x<=maxElement
*
*/
publicclassContinuousList{
privatedoubleminElement;
privatedoublemaxElement;
publicContinuousList(doubleminElement,doublemaxElement){
if(minElement>maxElement){
("區間不合理,minElement不能大於maxElement!");
}
this.minElement=minElement;
this.maxElement=maxElement;
}
/**
*判斷當前集合是否包含特定元素
*@paramelement
*@return
*/
publicbooleanisContainKey(doubleelement){
booleanflag=false;
if(element>minElement&&element<=maxElement){
flag=true;
}
returnflag;
}
}
privateList<ContinuousList>lotteryList;//概率連續集合
privatedoublemaxElement;//這里只需要最大值,最小值默認為0.0
/**
*構造抽獎集合
*@paramlist為獎品的概率
*/
publicLotteryUtil(List<Double>list){
lotteryList=newArrayList<ContinuousList>();
if(list.size()==0){
("抽獎集合不能為空!");
}
doubleminElement=0d;
ContinuousListcontinuousList=null;
for(Doubled:list){
minElement=maxElement;
maxElement=maxElement+d;
continuousList=newContinuousList(minElement,maxElement);
lotteryList.add(continuousList);
}
}
/**
*進行抽獎操作
*返回:獎品的概率list集合中的下標
*/
publicintrandomColunmIndex(){
intindex=-1;
Randomr=newRandom();
doubled=r.nextDouble()*maxElement;//生成0-1間的隨機數
if(d==0d){
d=r.nextDouble()*maxElement;//防止生成0.0
}
intsize=lotteryList.size();
for(inti=0;i<size;i++){
ContinuousListcl=lotteryList.get(i);
if(cl.isContainKey(d)){
index=i;
break;
}
}
if(index==-1){
("概率集合設置不合理!");
}
returnindex;
}
publicdoublegetMaxElement(){
returnmaxElement;
}
publicList<ContinuousList>getLotteryList(){
returnlotteryList;
}
publicvoidsetLotteryList(List<ContinuousList>lotteryList){
this.lotteryList=lotteryList;
}
}
該工具類的基本思想是,將抽獎概率分布到數軸上,如現有三個抽獎概率10、20、30,將三者依次添加到概率集合中,則構造的數軸為:0~10范圍內表示概率10,10~30范圍內表示概率為20,30~60范圍內表示概率為30,數軸上的長度對應著相應的概率。由這種處理方式可知,概率總和並不需要等於1。該工具類的成功與否在於Random.nextDouble()能否等概率地生成0~1之間的任意一個數。
對該抽獎工具進行測試,測試類如下:
[java]view plain
packagecom.lottery;
importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;
importjava.util.Map;
importjava.util.Map.Entry;
classResult{
privateintindex;
privateintsumTime;
privateinttime;
privatedoubleprobability;
privatedoublerealProbability;
publicintgetIndex(){
returnindex;
}
publicvoidsetIndex(intindex){
this.index=index;
}
publicintgetTime(){
returntime;
}
publicvoidsetTime(inttime){
this.time=time;
}
publicintgetSumTime(){
returnsumTime;
}
publicvoidsetSumTime(intsumTime){
this.sumTime=sumTime;
}
publicdoublegetProbability(){
returnprobability;
}
(){
returnrealProbability;
}
publicvoidsetRealProbability(doublerealProbability){
this.realProbability=realProbability;
}
publicResult(){
}
publicResult(intindex,intsumTime,inttime,doublerealProbability){
this.setIndex(index);
this.setTime(time);
this.setSumTime(sumTime);
this.setRealProbability(realProbability);
}
publicStringtoString(){
return"索引值:"+index+",抽獎總數:"+sumTime+",抽中次數:"+time+",概率:"
+realProbability+",實際概率:"+(double)time/sumTime;
}
}
publicclassTestLottery{
staticfinalintTIME=100000;
publicstaticvoiditeratorMap(Map<Integer,Integer>map,List<Double>list){
for(Entry<Integer,Integer>entry:map.entrySet()){
intindex=entry.getKey();
inttime=entry.getValue();
Resultresult=newResult(index,TIME,time,list.get(index));
System.out.println(result);
}
}
publicstaticvoidmain(String[]args){
//構造概率集合
List<Double>list=newArrayList<Double>();
list.add(20d);
list.add(80d);
list.add(50d);
list.add(30d);
LotteryUtilll=newLotteryUtil(list);
doublesumProbability=ll.getMaxElement();
Map<Integer,Integer>map=newHashMap<Integer,Integer>();
for(inti=0;i<TIME;i++){
intindex=ll.randomColunmIndex();
if(map.containsKey(index)){
map.put(index,map.get(index)+1);
}else{
map.put(index,1);
}
}
for(inti=0;i<list.size();i++){
doubleprobability=list.get(i)/sumProbability;
list.set(i,probability);
}
iteratorMap(map,list);
}
}
運行結果:
由結果可知,抽獎100000時, 得到的實際概率基本與正式概率相當。
以下說明此類調用方式:
[java]view plain
publicLotteryUtil(List<Double>list)
說明:構造方法,傳入參數為一個概率集合
[java]view plain
publicintrandomColunmIndex()
功能:進行抽獎操作,返回List集合的索引下標,此下標對應的概率的獎品即為抽中的獎品
『貳』 用java怎麼實現控制中獎率
可以做到!用 Random 得到隨機的數,再根據你的登陸人的身份 控制隨機的次數是多少!
例如:
1 - 20 為中獎, 普通就隨機出 10000個數。會員的話就隨機100個數就好了!
『叄』 這個幸運大抽獎的java代碼,怎麼編寫呢
抽獎就是一個random函數。假如中獎率為1%;
public class Test {
public static void main(String[] args) {
int chance = 100;// 中獎概率,百分之1就是100,千分之一就是1000
double b = Math.random() * chance;
int i = (int) b;
if (i < 1) {
System.out.println("中獎");
}
}
}
『肆』 怎樣用java編程一個雙色球中獎幾率
沒怎麼明白你的意思?
我理解的是不是這樣的:輸入一個六位數(1-33),然後系統不停的隨機,知道隨機到的六個數和這六個數一樣的時候,計算下總共用了多少次?
『伍』 用java完成一個抽獎的程序。 每次運行程序,都會從以下的抽獎結果中隨機顯示一個出來:
生成100個對象,對象有個屬性,其中10個是大獎,40個是小獎,50個是無獎。
放到一個List里。
每次抽中的步驟
1、隨機生成0-List長度之間的數值 ,去取List中的相應對象,並移除這個對象。
代碼如下。:
獎品對象類:
public class PrizeBean {
private String type;
public String getType() {
return eggType;
}
public void setType(String eggType) {
this.eggType = eggType;
}
}
獎品池初始化代碼段:
{
List prizebeanList = new ArrayList();
for (int i = 0; i < 10; i++) {
PrizeBean prizeBean = new PrizeBean();
prizeBean.setType(「大獎「);
prizebeanList.add(prizeBean);
}
for (int i = 0; i < 40; i++) {
PrizeBean prizeBean = new PrizeBean();
prizeBean.setType(「小獎「);
prizebeanList.add(prizeBean);
}
for (int i = 0; i < 50; i++) {
PrizeBean prizeBean = new PrizeBean();
prizeBean.setType(「無獎「);
prizebeanList.add(prizeBean);
}
}
抽獎代碼段:
/**
*獎品池已經空的,肯定返回無獎了。。。
**/
if(prizebeanList.size()==0){
- 沒有中獎哦,下次加油!
return;
}
/**
* 隨機生成,獎品池中獎品數量的數字。。取出獎品池中的數字。。移除記錄。返回。。
*/
int resultnum = (int) (Math.random() * prizebeanList.size());
PrizeBean resultPrizeBean = prizebeanList.get(resultnum);
prizebeanList.remove(resultPrizeBean);
if(resultPrizeBean.getType() .eqauls("大獎"){
- 恭喜,大獎!
}else if(resultPrizeBean.getType() .eqauls("小獎"){
- 運氣不錯哦,小獎!
}else{
- 沒有中獎哦,下次加油!
}.
『陸』 java抽獎程序,可設置不同獎品獲得概率
importjava.awt.EventQueue;
importjava.awt.TextArea;
importjava.awt.TextField;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.util.Random;
importjavax.swing.JButton;
importjavax.swing.JFrame;
importjavax.swing.JLabel;
importjavax.swing.JPanel;
importjavax.swing.JTextArea;
importjavax.swing.JTextField;
importjavax.swing.border.EmptyBorder;
{
privateJPanelcontentPane;
privateJTextFieldtextFieldA;
privateJTextFieldtextFieldB;
privateJTextFieldtextFieldC;
privateTextFieldtextField;
;
privateJTextAreatextArea;
/**
*Launchtheapplication.
*/
publicstaticvoidmain(String[]args){
EventQueue.invokeLater(newRunnable(){
publicvoidrun(){
try{
LuckySelectframe=newLuckySelect();
frame.setVisible(true);
}catch(Exceptione){
e.printStackTrace();
}
}
});
}
/**
*Createtheframe.
*/
publicLuckySelect(){
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,450,251);
contentPane=newJPanel();
contentPane.setBorder(newEmptyBorder(5,5,5,5));
contentPane.setLayout(null);
setContentPane(contentPane);
JLabellblA=newJLabel("A");
lblA.setBounds(10,128,54,15);
contentPane.add(lblA);
JLabellblB=newJLabel("B");
lblB.setBounds(124,128,54,15);
contentPane.add(lblB);
JLabellblC=newJLabel("C");
lblC.setBounds(254,128,54,15);
contentPane.add(lblC);
textFieldA=newJTextField();
textFieldA.setBounds(30,125,66,21);
contentPane.add(textFieldA);
textFieldA.setColumns(10);
textFieldB=newJTextField();
textFieldB.setColumns(10);
textFieldB.setBounds(149,125,66,21);
contentPane.add(textFieldB);
textFieldC=newJTextField();
textFieldC.setColumns(10);
textFieldC.setBounds(264,125,66,21);
contentPane.add(textFieldC);
textField=newTextField();
textField.setBounds(98,167,157,21);
contentPane.add(textField);
textField.setColumns(10);
textFieldResult=newJTextField();
textFieldResult.setBounds(280,167,66,21);
contentPane.add(textFieldResult);
textFieldResult.setColumns(10);
textFieldA.setText("10");
textFieldB.setText("10");
textFieldC.setText("10");
JButtonbutton=newJButton("u62BDu5956");
button.addActionListener(newActionListener(){
publicvoidactionPerformed(ActionEvente){
select();
}
});
button.setBounds(0,166,93,23);
contentPane.add(button);
textArea=newJTextArea();
textArea.setBounds(30,31,306,83);
contentPane.add(textArea);
}
protectedvoidselect(){
//TODOAuto-generatedmethodstub
intaNum=Integer.decode(textFieldA.getText());
intbNum=Integer.decode(textFieldB.getText());
intcNum=Integer.decode(textFieldB.getText());
Randomr=newRandom();
intrandom=r.nextInt(aNum+bNum+cNum);
if(random<=aNum){
textFieldA.setText(Integer.toString(Integer.decode(textFieldA.getText())-1));
textArea.append(Integer.toString(random)+"抽中了A ");
}elseif(random<=aNum+bNum){
textFieldB.setText(Integer.toString(Integer.decode(textFieldB.getText())-1));
textArea.append(Integer.toString(random)+"抽中了B ");
}elseif(random<=aNum+bNum+cNum){
textFieldC.setText(Integer.toString(Integer.decode(textFieldC.getText())-1));
textArea.append(Integer.toString(random)+"抽中了C ");
}
}
}
『柒』 求java演算法:根據物品的數量來確定抽獎的概率(當物品數量為0時無論如何都不可能選到)
public class Lottery {
private int m = 1000;//發放獎券的數量
private int n = 2;//獎品的數量
public boolean getLottery(){
boolean isLottery = false;
double d = (double)n/(double)m;//中獎概率
double r = Math.random();//0~1之間的隨機數,包括0
if(r<d){//如果隨機數小於概率 那麼中獎
n--;//獎品數量-1
isLottery = true;
}
m--;//獎券數量-1
return isLottery;
}
}
『捌』 初學java,突然想算一下買20年雙色球中一等獎概率,用java編譯時沒出錯,運行時出錯了。問一下哪錯了。
classSsq{
publicstaticvoidmain(String[]args){
//Gailvaa=newZonggailv();
System.out.println(Zonggailv.g());
}
}
java裡面一般用println輸出。
『玖』 JAVA抽獎的演算法
那你可以再1-10000之間隨即嘛,概率小的獎品設置為1-10,概率大的設置為11-1000,最後隨即出來的數判斷一下在那個區間就可以了.
實體類,就是寫一個JAVA BEAN嘛,裡面記載獎品名字和數量啊,不懂可以追問
『拾』 一等獎1個2等獎5個1等獎概率1%每人抽10次java怎麼寫
中獎率 1%,每人抽 10 次,也就是說 10 個人就可以抽 100 次,概率上來說 10 個人必中獎?假設邏輯是這樣的,可以這樣設計:
1、先寫定義一個表示概率的數組 ratio,這個數組最多可以存 100 個數字,每個數字的值不能重復,范圍是 0 到 100,表示 100%。現在你的中獎率是 1%,那麼就存一個數字。
2、定義一個是否中將的布爾型變數 win;
每次抽獎用隨機正整數對 100 取余,再將結果拿到 ratio 數組中查找,如果找到就將 win 賦值為 true,表示中獎。如果沒找到就對 win 賦值為 false,表示沒有中獎。