1. 程式人生 > 其它 >java小案例-雙色球

java小案例-雙色球

案例需求:使用者輸入一組由6個紅球和1個藍球組成的數字,系統隨機生成一組數字,通過判斷是否一致來辨別是否中獎
//紅色球號碼由1-33從選擇 藍色球號碼由1-16中選擇
//中獎條件與獎金數
/**
* 紅色0+藍色1, 紅1+藍1, 六等獎 5元
* 紅2+藍1,紅3+藍1,紅4+藍0 五等獎 10元
* 紅4+藍1,紅5+藍0 四等獎 200元
* 紅5+藍1 三等獎 3000元
* 紅6+藍0 二等獎 500萬元
* 紅6+藍1 一等獎 1000萬元
*/
該案例可以分成三部分,分別是系統隨機生成一組中獎號碼,使用者自身輸入號碼和判斷中獎情況
1.系統隨機生成中獎號碼
public static int[] createLuckNumbers(){
        //建立一組陣列,儲存7個球的號碼
        int[] numbers=new int[7];
        //隨機生成
        Random r=new Random();
        for (int i = 0; i < numbers.length-1; i++) {
            //先生成6個紅球 1-33,且不要重複的
            while (true) {
                //新建一個變數,接收隨機生成的數字
                int
data = r.nextInt(33) + 1; //新建一個訊號量,判斷新生成的數字是否重複 boolean flat=true;//沒有重複 //number【j】是一組新生成的數字 for (int j = 0; j < i; j++) { if(numbers[j]==data){ flat=false; break; } }
if(flat){ numbers[i]=data; break; } } } //l藍球1-16 隨機生成 numbers[numbers.length-1]= r.nextInt(16)+1; return numbers; }

這部分的流程是:a.定義陣列,用於儲存生成的號碼

b.使用Random方法隨機生成。

c.因為是雙色球,所以要分開生成藍球號碼和紅球號碼,並且根據要求紅球要1-33內的數字,且必須不能重複的。

d.遍歷陣列,設定陣列的前六位用來儲存紅球的號碼,因為必須要不重複,所以要設定一個訊號量判斷生成的數字是否重複,在死迴圈裡判斷,然後通過遍歷檢查新生成的數字與已經生成的數字是否重複,如果重複則訊號量為false,遍歷終止,重新進入死迴圈生成新的數字,重複操作,直到生成六個不重複數字的紅球,然後把這些數字存放到陣列中,跳出for迴圈,生成最後一個藍球號碼,並放入陣列中。

2.使用者自身輸入一組號碼

public static int[] userInputNumbers(){
        //建立一組陣列,儲存使用者輸入的數字
        int[] numbers=new int[7];
        //鍵盤輸入
        Scanner sc=new Scanner(System.in);
        //迴圈輸入1-6個號碼範圍1-33,且不重複的
        for (int i = 0; i < numbers.length-1; i++) {
            System.out.println("請你輸入第"+(i+1)+"個號碼(1-33,且不重複):");
            //設定變數接收使用者輸入的數字
            int data=sc.nextInt();
            //將接收的數字放入儲存的陣列中
            numbers[i]=data;


        }
        //使用者輸出藍球號碼1-16
        System.out.println("請你輸入藍色球的號碼(1-16):");
        int data= sc.nextInt();
        numbers[numbers.length-1]=data;
        return numbers;
    }

該部分的流程:a.新建陣列,用來儲存使用者輸入的數字。

b.通過引用Scanner方法,鍵入使用者所想要輸入的數字

c.通過遍歷陣列,輸入具有良好的使用者性的語句,設定一個變了接收使用者輸入的數字,並存入陣列中

d.跳出for迴圈,輸入藍球號碼,放入陣列中。

3.判斷中獎情況

 //判斷是否中獎了
    public static void judge(int[] luckNumbers, int[] userLuckNumber){
        //設定兩個變數,分別判斷紅球和藍球的個數
        int redHitNumbers=0;
        int blueHitNumber=0;

        //遍歷隨機生成的號碼與使用者輸入的號碼 紅球
        for (int i = 0; i < luckNumbers.length-1; i++) {
            for (int j = 0; j < userLuckNumber.length-1; j++) {
                if(userLuckNumber[j]==luckNumbers[i]){
                    redHitNumbers++;
                    break;
                }
            }

        }
        //判斷藍球號碼
       blueHitNumber= userLuckNumber[6] == luckNumbers[6] ? 1:0;

        System.out.println("本期的中獎號碼分別是:");
        printArray(luckNumbers);
        System.out.println("您輸入的號碼分別是");
        printArray(userLuckNumber);
        System.out.println("您所中的紅球號碼數是:"+redHitNumbers);
        System.out.println("您是否命中藍球:"+(blueHitNumber==1? "是":"否"));

        //判斷中獎情況
        if(redHitNumbers<3 &&blueHitNumber==1)
        {
            System.out.println("恭喜你中了六等獎,獲得了5塊錢!!!!");
        }else if(redHitNumbers == 3 && blueHitNumber ==1
                || redHitNumbers ==4 && blueHitNumber ==0 ){
            System.out.println("恭喜你中了五等獎,獲得了10塊錢!!!!");
        }else if (redHitNumbers ==4 && blueHitNumber == 1
                || redHitNumbers == 5 && blueHitNumber ==0){
            System.out.println("恭喜你中了四等獎,獲得了200元大獎!!!");
        }else if(redHitNumbers ==5 && blueHitNumber==1){
            System.out.println("恭喜你中了三等獎,獲得了3000元特大獎!!!");
        }else if(redHitNumbers == 6 && blueHitNumber == 0){
            System.out.println("恭喜你中了二等獎,獲得了500萬元現金鉅獎!!!!");
        }else if(redHitNumbers==6 &&blueHitNumber==1){
            System.out.println("恭喜你中了一等獎,獲得了1000萬元現金超級鉅獎,可以享受人生不用奮鬥了");
        }else {
            System.out.println("對不起,您沒有中獎,很遺憾,感謝您為慈善事業做出了傑出的貢獻");
        }

    }

該部分的流程:a.設定儲存紅球與藍球個數的變數;

b.遍歷查詢系統隨機生成的號碼與使用者輸入的號碼是否有一樣的,若是有則紅球數量加1,因為先判斷紅球的,然後跳出for迴圈使用三元運算子的方法判斷藍球號碼是否一樣。

c.通過if...else結構判斷中獎情況

 

4.感想與不足之處

通過做這個案例,有很多邏輯理不通,比如隨機生成號碼判斷是否重複那一部分就卡殼了許久,起初沒有想到要用死迴圈,但是通過做完案例收穫頗豐。

不足之處:自我感覺後期可以完善這個程式,比如:編寫出友好的使用者互動介面,還有設定使用者輸入紅球的號碼必須是1-33,否則就會報錯等的一些完善。

5.完整程式碼:

package com.study.day6;

import java.util.Random;
import java.util.Scanner;

public class ShuangSeQiuDemo7 {
    public static void main(String[] args) {
        //案例:使用者輸入一組由6個紅球和1個藍球組成的數字,系統隨機生成一組數字,通過判斷是否一致來辨別是否中獎
        //紅色球號碼由1-33從選擇  藍色球號碼由1-16中選擇
        //中獎條件與獎金數
        /**
         * 紅色0+藍色1, 紅1+藍1,       六等獎  5元
         * 紅2+藍1,紅3+藍1,紅4+藍0    五等獎  10元
         * 紅4+藍1,紅5+藍0            四等獎  200元
         * 紅5+藍1                    三等獎  3000元
         * 紅6+藍0                    二等獎  500萬元
         * 紅6+藍1                    一等獎  1000萬元
         */
        //隨機生成
        int[] luckNumbers=createLuckNumbers();
        //printArray(luckNumbers);
        //使用者自選號碼
        int[] userLuckNumber=userInputNumbers();
       // printArray(userLuckNumber);
        //判斷中獎情況
        judge(luckNumbers,userLuckNumber);
    }
    //判斷是否中獎了
    public static void judge(int[] luckNumbers, int[] userLuckNumber){
        //設定兩個變數,分別判斷紅球和藍球的個數
        int redHitNumbers=0;
        int blueHitNumber=0;

        //遍歷隨機生成的號碼與使用者輸入的號碼 紅球
        for (int i = 0; i < luckNumbers.length-1; i++) {
            for (int j = 0; j < userLuckNumber.length-1; j++) {
                if(userLuckNumber[j]==luckNumbers[i]){
                    redHitNumbers++;
                    break;
                }
            }

        }
        //判斷藍球號碼
       blueHitNumber= userLuckNumber[6] == luckNumbers[6] ? 1:0;

        System.out.println("本期的中獎號碼分別是:");
        printArray(luckNumbers);
        System.out.println("您輸入的號碼分別是");
        printArray(userLuckNumber);
        System.out.println("您所中的紅球號碼數是:"+redHitNumbers);
        System.out.println("您是否命中藍球:"+(blueHitNumber==1? "是":"否"));

        //判斷中獎情況
        if(redHitNumbers<3 &&blueHitNumber==1)
        {
            System.out.println("恭喜你中了六等獎,獲得了5塊錢!!!!");
        }else if(redHitNumbers == 3 && blueHitNumber ==1
                || redHitNumbers ==4 && blueHitNumber ==0 ){
            System.out.println("恭喜你中了五等獎,獲得了10塊錢!!!!");
        }else if (redHitNumbers ==4 && blueHitNumber == 1
                || redHitNumbers == 5 && blueHitNumber ==0){
            System.out.println("恭喜你中了四等獎,獲得了200元大獎!!!");
        }else if(redHitNumbers ==5 && blueHitNumber==1){
            System.out.println("恭喜你中了三等獎,獲得了3000元特大獎!!!");
        }else if(redHitNumbers == 6 && blueHitNumber == 0){
            System.out.println("恭喜你中了二等獎,獲得了500萬元現金鉅獎!!!!");
        }else if(redHitNumbers==6 &&blueHitNumber==1){
            System.out.println("恭喜你中了一等獎,獲得了1000萬元現金超級鉅獎,可以享受人生不用奮鬥了");
        }else {
            System.out.println("對不起,您沒有中獎,很遺憾,感謝您為慈善事業做出了傑出的貢獻");
        }

    }
    public static int[] userInputNumbers(){
        //建立一組陣列,儲存使用者輸入的數字
        int[] numbers=new int[7];
        //鍵盤輸入
        Scanner sc=new Scanner(System.in);
        //迴圈輸入1-6個號碼範圍1-33,且不重複的
        for (int i = 0; i < numbers.length-1; i++) {
            System.out.println("請你輸入第"+(i+1)+"個號碼(1-33,且不重複):");
            //設定變數接收使用者輸入的數字
            int data=sc.nextInt();
            //將接收的數字放入儲存的陣列中
            numbers[i]=data;


        }
        //使用者輸出藍球號碼1-16
        System.out.println("請你輸入藍色球的號碼(1-16):");
        int data= sc.nextInt();
        numbers[numbers.length-1]=data;
        return numbers;
    }


    //輸出方法
    public static void printArray(int[] arr){
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }
        System.out.println();//換行
    }
    public static int[] createLuckNumbers(){
        //建立一組陣列,儲存7個球的號碼
        int[] numbers=new int[7];
        //隨機生成
        Random r=new Random();
        for (int i = 0; i < numbers.length-1; i++) {
            //先生成6個紅球 1-33,且不要重複的
            while (true) {
                //新建一個變數,接收隨機生成的數字
                int data = r.nextInt(33) + 1;
                //新建一個訊號量,判斷新生成的數字是否重複
                boolean flat=true;//沒有重複
                //number【j】是一組新生成的數字
                for (int j = 0; j < i; j++) {
                    if(numbers[j]==data){
                        flat=false;
                        break;
                    }

                }
                    if(flat){
                        numbers[i]=data;
                        break;

                    }
            }
            
        }
        //l藍球1-16 隨機生成
        numbers[numbers.length-1]= r.nextInt(16)+1;
        return numbers;
    }
}