雙色球開獎主要是數組的賦值以及電腦隨機數的產生
模擬雙色球開獎:
int money=0;
int [] cho=new int[6];//紅球
int[] last=new int[7];//最後選球結果
int ch=0;//籃球
String a="機選";
String b="自選";
Scanner in=new Scanner(System.in);
System.out.println("請輸入選擇方式,機選或者自選");
String c=in.next();
if(c.equals(b)){//控制選擇的方式爲手選
for(int i=0;i<cho.length;i++){//遍歷輸入數組的值,爲紅球號碼
System.out.println("請輸入第"+(i+1)+"個紅球");
cho[i]=in.nextInt();
if(cho[i]>33||cho[i]<1){//控制輸入的範圍
System.out.println("輸入超出號數限制,請重新輸入");
i--;
}
for(int j=0;j<i;j++){//控制輸入號碼不能重複
if(cho[i]==cho[j]){
System.out.println("輸入號碼與前面重複,請重熟入");
i--;
}
}
}
for(int i=1;i<2;i++){ //單獨輸入藍球
System.out.println("請輸入籃球號碼");
ch=in.nextInt();
if(ch>16||ch<1){//控制範圍
System.out.println("輸入超出限制,請重新輸入");
i--;
}
}
}
else if(c.equals(a)){//控制選擇的方式爲機選,此後內容同理手選,只是將值改爲隨機
for(int i=0;i<cho.length;i++){
cho[i]=(int)(Math.random()*33+1);//隨機產生數,遍歷賦值給數組
for(int j=0;j<i;j++){
if(cho[i]==cho[j]){
i--;
}
}
}
for(int i=1;i<2;i++){
ch=(int)(Math.random()*16+1);
}
}
for(int i=0;i<cho.length;i++){
for(int j=(i+1);j<cho.length;j++){//對號碼進行選擇排序,同樣可以冒泡
if(cho[j]<cho[i]){
cho[i]=cho[i]^cho[j];
cho[j]=cho[i]^cho[j];
cho[i]=cho[i]^cho[j];
}
}
}
for(int i=0;i<last.length;i++){//將紅球與藍球同時放入一個數組
if(i<last.length-1){
last[i]=cho[i];
}
if(i==(last.length-1)){
last[i]=ch;
}
}
System.out.print("你選擇的號碼是:");
for(int i=0;i<last.length;i++){//輸出該數組作爲選擇的號碼
System.out.print(last[i]+" ");
}
int[]com=new int[7];//開獎數組
int[]com1=new int[6];
int com2=0;
for(int i=0;i<com1.length;i++){//下面爲開獎號碼,與機選同理
com1[i]=(int)(Math.random()*33+1);
for(int j=0;j<i;j++){
if(com1[i]==com1[j]){
i--;
}
}
}
for(int i=1;i<2;i++){
com2=(int)(Math.random()*16+1);
}
for(int i=0;i<com1.length;i++){
for(int j=(i+1);j<com1.length;j++){
if(com1[j]<com1[i]){
com1[i]=com1[i]^com1[j];
com1[j]=com1[i]^com1[j];
com1[i]=com1[i]^com1[j];
}
}
}
for(int i=0;i<com.length;i++){
if(i<com.length-1){
com[i]=com1[i];
}
if(i==(com.length-1)){
com[i]=com2;
}
}
System.out.print("\n開獎號碼是: ");
for(int i=0;i<com.length;i++){
System.out.print(com[i]+" ");
}
System.out.println("\n中獎結果:");
int count=0;
int count1=0;
for(int i=0;i<cho.length;i++){
for(int j=0;j<cho.length;j++){
if(com1[i]==cho[j]){
count++;
}
}
}
if(ch==com2){
count1=1;
}
if(count1==1){//開獎結果
switch(count){
case 0:
case 1:
case 2:System.out.println("恭喜你中了六等獎:5塊錢");break;
case 3:System.out.println("恭喜你中了五等獎:10塊錢");break;
case 4:System.out.println("恭喜你中了四等獎:200塊錢");break;
case 5:System.out.println("恭喜你中了三等獎:3000塊錢");break;
case 6:System.out.println("恭喜你中了一等獎:");break;
}
}
else if(count1==0){
switch(count){
case 4:System.out.println("恭喜你中了五等獎:10塊錢");break;
case 5:System.out.println("恭喜你中了四等獎:200塊錢");break;
case 6:System.out.println("恭喜你中了二等獎:賺大了");break;
default:System.out.println("什麼都沒得到,請再接再厲");break;
}
}
當然爲了減少代碼量這個題可以寫一個方法來調用機選方式,同時運用於開獎號碼。
深入思考題目,爲這個題增加點內容:由用戶守號,確定中獎時要買多少期,以及花了多少錢:
只需要將代碼稍作改變即可實現:
int pay=0;
int num=0;
int [] cho=new int[6];//紅球
int[] last=new int[7];//最後選球結果
int ch=0;//籃球
String a="機選";
String b="自選";
Scanner in=new Scanner(System.in);
System.out.println("請輸入選擇方式,機選或者自選");
String c=in.next();
if(c.equals(b)){
for(int i=0;i<cho.length;i++){
System.out.println("請輸入第"+(i+1)+"個紅球");
cho[i]=in.nextInt();
if(cho[i]>33||cho[i]<1){
System.out.println("輸入超出號數限制,請重新輸入");
i--;
}
for(int j=0;j<i;j++){
if(cho[i]==cho[j]){
System.out.println("輸入號碼與 前面重複,請重新輸入");
i--;
}
}
}
for(int i=1;i<2;i++){
System.out.println("請輸入籃球號碼");
ch=in.nextInt();
if(ch>16||ch<1){
System.out.println("輸入超出限制,請重新輸入");
i--;
}
}
}
else if(c.equals(a)){
for(int i=0;i<cho.length;i++){
cho[i]=(int)(Math.random()*33+1);
for(int j=0;j<i;j++){
if(cho[i]==cho[j]){
i--;
}
}
}
for(int i=1;i<2;i++){
ch=(int)(Math.random()*16+1);
}
}
for(int i=0;i<cho.length;i++){
for(int j=(i+1);j<cho.length;j++){
if(cho[j]<cho[i]){
cho[i]=cho[i]^cho[j];
cho[j]=cho[i]^cho[j];
cho[i]=cho[i]^cho[j];
}
}
}
for(int i=0;i<last.length;i++){
if(i<last.length-1){
last[i]=cho[i];
}
if(i==(last.length-1)){
last[i]=ch;
}
}
System.out.print("你選擇的號碼是:");
for(int i=0;i<last.length;i++){
System.out.print(last[i]+" ");
}
int[]com=new int[7];
int[]com1=new int[6];
int com2=0;
for(;;){//由死循環控制一直開獎
num++;//由num計數開獎次數,同時等同於購買彩票次數
for(int i=0;i<com1.length;i++){
com1[i]=(int)(Math.random()*33+1);
for(int j=0;j<i;j++){
if(com1[i]==com1[j]){
i--;
}
}
}
for(int i=1;i<2;i++){
com2=(int)(Math.random()*16+1);
}
for(int i=0;i<com1.length;i++){
for(int j=(i+1);j<com1.length;j++){
if(com1[j]<com1[i]){
com1[i]=com1[i]^com1[j];
com1[j]=com1[i]^com1[j];
com1[i]=com1[i]^com1[j];
}
}
}
for(int i=0;i<com.length;i++){
if(i<com.length-1){
com[i]=com1[i];
}
if(i==(com.length-1)){
com[i]=com2;
}
}
int count=0;//此處往上代碼與,上題同理,此處count用於計數紅球中獎個數
int count1=0;//此處用於確定藍球是否中獎
for(int i=0;i<cho.length;i++){
for(int j=0;j<cho.length;j++){//紅球中獎一個則count增加一
if(com1[i]==cho[j]){
count++;
}
}
}
if(ch==com2){//藍球中獎則count1爲1
count1=1;
}
if(count1==1){
switch(count){//pay記載每注中獎得金額合計
case 0:
case 1:
case 2:pay+=5;break;
case 3:pay+=10;break;
case 4:pay+=200;break;
case 5:pay+=3000;break;
case 6:break;
}
}
else if(count1==0){
switch(count){
case 4:pay+=10;break;
case 5:pay+=200;break;
case 6:pay+=500000;break;
default:break;
}
}
if(count1==1&&count==6){//中一等獎時紅球count爲6,count1爲1,此時輸出花掉的錢num*2,購買次數num,以及累計中獎金額。
System.out.println("恭喜中得一等獎\n你總共買了彩票"+num+"次");
System.out.println("總共中獎得錢:"+pay);
System.out.println("總共花錢:"+num*2);
break;
}
}