java小案例-雙色球
阿新 • • 發佈:2022-04-02
案例需求:使用者輸入一組由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) { //新建一個變數,接收隨機生成的數字 intdata = 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; } }