大樂透接近真實版有幾個邏輯步驟
1.有兩盒箱子裡面裝1~49號球
2.丟到大的箱子禮用吹風攪亂
3.攪阿攪的,直到想要抽出一個號碼球
4.這樣抽出六顆球後再取出特別號
分析完後就開始想要如何實現
1.弄兩個陣列,都是塞1~49號,沒意外肯定是int整數陣列,用for迴圈去塞數值,一個陣列給特別號用
2.另外準備兩個大型陣列,假設是1000陣列,這樣才夠大,球才可以丟進去嘛
3.弄個迴圈,利用亂數找出兩個不重複位置,然後讓這兩個位置交換,模擬出吹風混亂的感覺,讓他交換個一萬次,或者十萬次
讓他越亂越真實
4.一個個取出來,最接近出口的取出來好了,假設出口在最前面好了
5.再去抽出特別號
大概就是這樣的邏輯去做吧
然後分析完每個步驟後,再想辦法去實現每一個階段
每實現一個階段就去測看看是不是實現了
這樣就會是完整程式啦
public class lottery_2 {
public static void shuffle(int target[]){//洗球程式
int chaosTimes=1;//混亂
java.util.Random randomInt =new java.util.Random();//宣告亂數
while(chaosTimes<=100000){//用while是因為考慮之後改寫用中斷法可以直接使用
int temp1,temp2,temp3;
do{
temp1=randomInt.nextInt(1000);
temp2=randomInt.nextInt(1000);
}while(temp1==temp2);//如果想換的位置撞到
temp3=target[temp2];
target[temp2]=target[temp1];
target[temp1]=temp3;
chaosTimes++;
}
}
public static void main(String[] arge){
String result="";//印答案
String result2="";//印排序後答案
int lottery[]=new int [6];//樂透六個號碼
int special;//特別號
boolean flagRepeat;//驗證是否重複的旗標
int x=0;//準備接隨機號
int lotteryBalls[]=new int [49];//樂透49個球
int lotteryBallsSpecial[]=new int [49];//樂透49個球特別號用
int lotteryBox[]=new int [1000];//樂透箱子 假設可以裝一千個球
int lotteryBoxSpecial[]=new int [1000];//樂透箱子特別號
for(int i=0;i<lotteryBalls.length;i++){//球都是49號碼 偷懶就放同回圈
lotteryBalls[i]=i+1;
lotteryBallsSpecial[i]=i+1;
}
java.util.Random randomInt =new java.util.Random();//宣告亂數
for(int i=0;i<lotteryBalls.length;i++){//球都是49號碼 丟球進盒子
int temp=0;
do{
temp=randomInt.nextInt(1000);//
}while(lotteryBox[temp]!=0);
lotteryBox[temp]=lotteryBalls[i];//球丟進盒子
do{
temp=randomInt.nextInt(1000);
}while(lotteryBoxSpecial[temp]!=0);
lotteryBoxSpecial[temp]=lotteryBallsSpecial[i];//特別號的球丟進盒子
}
shuffle(lotteryBox);//洗球囉
shuffle(lotteryBoxSpecial);//洗球囉 特別號的箱子
for(int i=0;i<lottery.length;i++){//取球囉 直接取最前面的球
int j=0;
while(lotteryBox[j]==0){//0代表沒球 直到找到非0的球
j++;
}
lottery[i]=lotteryBox[j];//抽到開獎裡
lotteryBox[j]=0;//號碼抽出來了 所以把他放成0
shuffle(lotteryBox);//再洗球
}
special=randomInt.nextInt(48)+1;//開特別號
shuffle(lotteryBoxSpecial);//多洗一次特別號
for(int i=0;i<lotteryBoxSpecial.length;i++){
if(lotteryBoxSpecial[i]!=0){
special=lotteryBoxSpecial[i];//開出最前面的球道特別號
break;
}
}
result+="開獎(未排序):\t";
for(int i:lottery){
result+=i+"\t";
}
System.out.println(result+"特別號:\t"+special);
result2+="開獎(未排序):\t";
for(int i=0;i<lottery.length-1;i++){
for(int j=i+1;j<lottery.length;j++){
if(lottery[i]>lottery[j]){
int temp;
temp=lottery[i];
lottery[i]=lottery[j];
lottery[j]=temp;
}
}
}
for(int i:lottery){
result2+=i+"\t";
}
System.out.println(result2+"特別號:\t"+special);
}
}
留言列表