雙色球案例

/**
    模擬雙色球綜合案列
    1、用戶選擇是機(jī)選還是手選號碼
    2、接收用戶選號(6紅,1藍(lán))
    3、生成系統(tǒng)號碼(6紅,1藍(lán))
    4、比較系統(tǒng)號碼和用戶號碼,記錄個數(shù)
    5、驗(yàn)證是否中獎
    6、系統(tǒng)號碼排序
    7、公布結(jié)果
 */
import java.util.Scanner;
import java.util.Random;
import java.util.Arrays;
public class Test9 {
    public static void main(String[] args) {
        //定義相關(guān)變量
        int[] userRedBall = new int[6];//用戶選擇的紅球號碼6個
        int[] sysRedBall = new int[6];//系統(tǒng)生成的紅球號碼6個
        int userBlueBall = 0;  //用戶選擇的藍(lán)球號碼
        int sysBlueBall = 0;  //系統(tǒng)生成的藍(lán)球號碼
        int redCount = 0;     //記錄用戶選擇正確的紅球數(shù)
        int blueCount = 0;    //記錄用戶選擇正確的藍(lán)球數(shù)
        int[] redBall = new int[33];//用于存儲1-33的紅球號碼,系統(tǒng)生成的
        
        //需要隨機(jī)生成6個在1-33之間不重復(fù)的數(shù)(算法)
        for(int i=0;i<redBall.length;i++){
            redBall[i]=i+1;
        }
        //游戲開始,系統(tǒng)提示
        System.out.println("雙色球游戲開始");
        System.out.println("請問是機(jī)選還是手選(1:機(jī)選,2:手選)");
        Scanner input = new Scanner(System.in);
        Random r = new Random();
        boolean flag = true;
        while(flag){
            int isAuto = input.nextInt();
            switch(isAuto){
            case 1:
                //機(jī)選
                computerSelection(redBall,userRedBall); //機(jī)選紅球
                userBlueBall = r.nextInt(16)+1;//機(jī)選藍(lán)球
                flag = false;
                break;
            case 2:
                //手選
                System.out.println("請選擇6個紅球號碼(1-33)");
                for(int i=0;i<userRedBall.length;i++){
                    userRedBall[i] = input.nextInt();
                }
                System.out.println("請選擇1個藍(lán)球號碼(1-16)");
                userBlueBall = input.nextInt();
                flag=false;
                break;
            default :
                System.out.println("請問是機(jī)選還是手選(1:機(jī)選,2:手選)");
                break;
            }
            
        }
        
        //系統(tǒng)隨機(jī)生成號碼
        //紅球
        computerSelection(redBall,sysRedBall);
        //藍(lán)球
        sysBlueBall = r.nextInt(16)+1;
        
        //統(tǒng)計結(jié)果:
        //統(tǒng)計紅球相同個數(shù):
         for(int i=0;i<userRedBall.length;i++){
             for(int j=0;j<sysRedBall.length-redCount;j++){
                 if(userRedBall[i]==sysRedBall[j]){
                     int tmp=sysRedBall[i];
                     sysRedBall[i]=sysRedBall[sysRedBall.length-1-redCount];
                     sysRedBall[sysRedBall.length-1-redCount]=tmp;
                     redCount++;
                     break;
                 }
             }
         }
         //統(tǒng)計藍(lán)球
         if(userBlueBall==sysBlueBall){
             blueCount=1;
         }
         
         //驗(yàn)證是否中獎
         if(blueCount==0 && redCount<=3){
             System.out.println("尚未中獎");
         }else if(blueCount==1 && redCount<3){
             System.out.println("中六等獎,5塊錢");
         }else if((blueCount==1 && redCount==3) || (blueCount==0 && redCount==4)){
             System.out.println("中五等獎,10塊錢");
         }else if((blueCount==1 && redCount==4) || (blueCount==0 && redCount==5)){
             System.out.println("中四等獎,200塊錢");
         }else if(blueCount==1 && redCount==5){
             System.out.println("中三等獎,3000塊錢");
         }else if(blueCount==0 && redCount==6){
             System.out.println("中二等獎,150W");
         }else if(blueCount==1 && redCount==6){
             System.out.println("中一等獎,500W");
         }else{
             System.out.println("系統(tǒng)有誤,中獎無效");
         }
         
         //公布系統(tǒng)中獎號碼
         System.out.println("本期中獎號碼為: ");
         sort(sysRedBall);
         System.out.println(Arrays.toString(sysRedBall));
         System.out.println("本期中獎藍(lán)球號碼為: "+sysBlueBall);
         //公布用戶號碼
         System.out.println("您選擇的紅球號碼為: ");
         sort(userRedBall);
         System.out.println(Arrays.toString(userRedBall));
         System.out.println("您選擇的藍(lán)球號碼為: "+userBlueBall);
         System.out.println("買雙色球,造福你我他,謝謝參與");
         
        
        

    }
    
    //對生成的數(shù)組排序
    public static void sort(int[] ball){
        for(int i=0;i<ball.length-1;i++){
            for(int j=0;j<ball.length-1-i;j++){
                if(ball[j]>ball[j+1]){
                    ball[j]=ball[j]+ball[j+1];
                    ball[j+1]=ball[j]-ball[j+1];
                    ball[j]=ball[j]-ball[j+1];
                }
            }
        }
    }
    
    //用戶在指定數(shù)列中,隨機(jī)生成多個不重復(fù)的數(shù),組成數(shù)組
       原數(shù)組redBall  ,待生成的目標(biāo)數(shù)組userRedBall,長度都是已知的
    public static void computerSelection(int[] redBall,int[] userRedBall){
        Random r = new Random();
        int index = -1;
        for(int i=0;i<userRedBall.length;i++){ //循環(huán)6次,取出紅球6個,這樣效率最高因?yàn)橹谎h(huán)了6次
            index=r.nextInt(redBall.length-i);//隨機(jī)產(chǎn)生一個數(shù),范圍是0到redBall.length-i,不包含redBall.length-i
            userRedBall[i] = redBall[index];
            
            int tmp = redBall[index];
            redBall[index]=redBall[redBall.length-1-i]; //取第一個隨機(jī)數(shù)后就將此數(shù)放在數(shù)組的最后一個位置,第二次取得時候就從倒數(shù)第二個到第一個之間的
            redBall[redBall.length-1-i]=tmp;
        }
         
    }

}

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容