JAVA的雙色球 小程序


  還是挺簡單的,功能過於強大。

import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class doubleRedBall {
    private static Scanner inputScanner;
    /**
     * 順着思路寫 就行
     * 
     * */

    public static void main(String[] args) {
        // 定義相關變量
        int[] userRedBall = new int[6]; //用戶生成的紅球號碼
        int[] sysRedBall = new int[6];// 系統生成的紅球號碼
        int userBlueBall = 0;    //用戶選擇的藍球
        int sysBlueBall = 0;    //系統生成的藍球
        int redCount = 0,blueCount = 0;//用戶選擇正確的紅球數和藍球數。
        int[] redBall = new int[33];
        inputScanner = new Scanner(System.in);
        Random random = new Random();
        //需要隨機生成6個在1-33之間不重復的數(算法)
        for(int i=0;i<redBall.length;i++) {
            redBall[i] = i+1;
        }
        //游戲開始,系統提示。
        System.out.println("定個小目標,先中它一個億!");
        System.out.println("打算自選號碼,還是首選號碼? \n請輸入\"機選\"或\"手選\"。");
        Boolean answerRight = false;
        while (!answerRight) {
            String choose = inputScanner.next();
            answerRight = true; // 下次默認跳出while
            switch (choose) {
            case "機選":
                computerSelection(redBall, userRedBall);
                userBlueBall = random.nextInt(16) + 1;
                break;
            case "手選":
                System.out.println("請選擇6個紅球號碼(1-33):");
                for(int i=0;i<userRedBall.length;i++) {
                    System.out.println("輸入第"+(i+1)+"個號碼:");
                    userRedBall[i] = inputScanner.nextInt();
                    if(userRedBall[i]<1|userRedBall[i]>33) {
                        System.out.println("輸入有誤,請重新輸入");
                        i--;
                    }
                }
                System.out.println("請選擇1個藍球號碼(1-16):");
                userBlueBall = inputScanner.nextInt();
                
                break;
            default:
                System.out.println("輸入有誤!請輸入\"機選\"或\"手選\"。");
                answerRight = false; // 輸入不合法,繼續while。
                break;
            }
        }// 至此 用戶 球號確定
        //系統隨機生成號碼。
        computerSelection(redBall, sysRedBall);//雖然 redBall 的順序變了 但是不影響亂序生成
        sysBlueBall = random.nextInt(16)+1;
        //至此  系統球號確定。
        for(int i=0;i<userRedBall.length;i++) {
            for(int j=0;j<sysRedBall.length;j++) {
                if(userRedBall[i]==sysRedBall[j]) {
                    redCount++;
                }
            }
        }
        if(userBlueBall==sysBlueBall) {
            blueCount++;
        }
        System.out.println("紅球一致個數:"+redCount);
        System.out.println("藍球一致個數:"+blueCount);
        //公布中獎號碼
        System.out.println("本期中獎紅球號碼:");
        Arrays.sort(sysRedBall);
        System.out.println(Arrays.toString(sysRedBall));
        System.out.println("本期中獎藍球號碼:"+sysBlueBall);
        //公布用戶號碼
        System.out.println("您選擇的紅球號碼:");
        Arrays.sort(userRedBall);
        System.out.println(Arrays.toString(userRedBall));
        System.out.println("您選擇的藍球號碼:"+userBlueBall);
        
    }
    //用於在指定數列中 隨機生成多個不重復的數的算法。
    /**
     * @param balls 給定的需要在其中選出6個元素的數組
     * @param redBall 存儲選出的6個元素的數組
     * 傳進來的 ball userRedBall 都會改變。
     */
    public static void computerSelection(int[] balls,int[] userRedBall) {
        
        Random random = new Random();
        int index = -1;
        for(int i=0;i<userRedBall.length;i++) {
             index = random.nextInt(balls.length-1-i);
             userRedBall[i] = balls[index];
             
             balls[index] = balls[index]^balls[balls.length-1-i];
             balls[balls.length-1-i] = balls[index]^balls[balls.length-1-i];
             balls[index] = balls[index]^balls[balls.length-1-i];
        }
        // 此時得到的 userRedBall 就是選出的六個不重復的紅球。
    }
    /**
     * @param first
     * @param second
     * @return
     * 盡量優化速度,之后的結果 nlogn 的速度。
     */
    public static int compSame(int[] first,int[] second) { 
        int lenFirst = first.length,lenSecond = second.length;
        int sameNum=0;
        for(int i=0;i<lenFirst;i++) {
            if(Arrays.binarySearch(second, first[i])>=0&Arrays.binarySearch(second, first[i])<lenSecond) {
                sameNum++;
            }
        }
        return sameNum;
        
    }
}
/**
 * 形參和實參的變化。
 * 如果基本類型和String  是存儲在棧內存當中的,當被調函數被調用時形參申請空間,開始執行操作,在操作完畢的時候釋放 形參申請的空間。這樣的話  實參根本沒有改變。
 * 如果操作對象是對象的話,形參接受棧內存 內的地址,然后去堆內存中進行操作,此時操作的是 堆內存中的數據,雖然地址沒變 ,但是地址指向的空間內的 數據已經改變。 
 * 
 * 
 * */

 

 

 

byte short  int 在計算的時候  會自動轉換為  int 類型。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM