应用案例之模拟双色球彩票
1、双色球彩票的玩法:
双色球投注区分为红色球号码区和蓝色球号码区,红色球号码范围为01-33,蓝色球号码范围为01-16.
双色球每期从33个红球中开出6个号码,从16个蓝球中开出1个号码作为中奖号码,双色球玩法即是竞猜开奖号码的6个红球号码和1个蓝球号码,顺序不限
1 package com.xiongdilian.first; 2 3 import java.util.Random; 4 import java.util.Scanner; 5 6 /* 7 应用案例之模拟双色球彩票 8 1、双色球彩票的玩法: 9 双色球投注区分为红色球号码区和蓝色球号码区,红色球号码范围为01-33,蓝色球号码范围为01-16. 10 双色球每期从33个红球中开出6个号码,从16个蓝球中开出1个号码作为中奖号码,双色球玩法即是竞猜开奖号码的6个红球号码和1个蓝球号码,顺序不限 11 12 2、双色球彩票需求分析: 13 1、如何产生篮球和红球 14 2、如何接收用户选号 15 3、如何验证是否中奖 16 4、公布本期中奖号码 17 18 3、实现步骤: 19 1、系统生成一个篮球和六个红球,并存储起来 20 2、接收用户选号,1个蓝球和6个红球 21 3、验证系统号码与用户号码是否匹配(是否中奖) 22 4、公布本期中奖号码 23 */ 24 public class fiftyFour_fiftyFive_fiftySix_fiftySeven_fiftyEight { 25 26 public static void main(String[] args) { 27 28 //定义变量 29 int sysBlueBallNum;//系统生成的篮球号 30 int[] sysRedBallNum = new int[6];//系统生成的红球号 31 int userBlueBallNum;//用户选择的蓝球号 32 int[] userRedBallNum = new int[6];//用户选择的红球号 33 34 int blueBall = 0;//篮球号码是否正确; 35 int redBallCount = 0;//记录红球号码正确的数量 36 37 Random r = new Random();//创建生成随机数的工具类 38 Scanner input = new Scanner(System.in); 39 40 41 int[] redNum = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33}; 42 43 sysBlueBallNum = r.nextInt(16)+1;//括号里的16表示随机产生一个0到16之间的数,这里包括0不包括16,双色球中没有0所以要加上1(产生篮球号码) 44 45 //随机生成红球号码 46 for(int i = 0; i<sysRedBallNum.length;i++){ 47 while(true){ 48 int index = r.nextInt(33);//redNum的下标 49 if(redNum[index]!=0){ 50 sysRedBallNum[i] = redNum[index]; 51 redNum[index] = 0; 52 break; 53 } 54 } 55 } 56 57 58 //用户输入号码 59 System.out.println("双色球彩票选号开始。。。。。祝你好运!"); 60 System.out.println("请选择篮球号码(16选1):"); 61 userBlueBallNum = input.nextInt(); 62 System.out.println("请选择红球号码(33选6):"); 63 for(int i = 0;i<userRedBallNum.length;i++){ 64 userRedBallNum[i] = input.nextInt(); 65 } 66 67 68 //判断用户选择的号码跟系统生成的号码是否匹配 69 //----验证篮球 70 if(userBlueBallNum == sysBlueBallNum){ 71 blueBall = 1; 72 } 73 //-----验证红球 74 for(int i= 0;i<userRedBallNum.length;i++ ){ 75 for(int j = 0;j<sysRedBallNum.length;j++){ 76 if(userRedBallNum[i] == sysRedBallNum[j]){ 77 redBallCount++; 78 break; 79 } 80 } 81 } 82 83 84 85 //判断是否中奖了 86 if(blueBall==1 && redBallCount==6){ 87 System.out.println("恭喜你中了一等奖500万!"); 88 }else if(redBallCount==6){ 89 System.out.println("恭喜你中了二等奖!"); 90 }else if(blueBall==1 && redBallCount==5){ 91 System.out.println("恭喜你中了三等奖,3000元!"); 92 }else if(redBallCount==5 || (redBallCount==4 && blueBall==1)){ 93 System.out.println("恭喜你中了四等奖,200元!"); 94 }else if(redBallCount==4 || (redBallCount==3 && blueBall==1)){ 95 System.out.println("恭喜你中了五等奖,10元!"); 96 }else if(blueBall==1){ 97 System.out.println("恭喜你中了六等奖,5元!"); 98 }else{ 99 System.out.println("革命尚未成功,同志仍需努力"); 100 } 101 102 103 //公布本期中奖号码 104 int temp; 105 for(int i =0 ;i<sysRedBallNum.length-1;i++){ 106 for(int j =0; j<sysRedBallNum.length-1-i;j++){ 107 if(sysRedBallNum[j]>sysRedBallNum[j+1]){ 108 temp = sysRedBallNum[j]; 109 sysRedBallNum[j] = sysRedBallNum[j+1]; 110 sysRedBallNum[j+1] = temp; 111 } 112 } 113 } 114 //输出本期中奖号码 115 System.out.println("本期的中奖号码为:"); 116 System.out.println("红球:"); 117 for(int i = 0;i<sysRedBallNum.length;i++){ 118 System.out.print(sysRedBallNum[i]+" "); 119 } 120 System.out.println(); 121 122 System.out.println("篮球:"); 123 System.out.println(sysBlueBallNum); 124 } 125 126 }
将如上代码进行优化为:
1 package com.xiongdilian.first; 2 3 import java.util.Random; 4 import java.util.Scanner; 5 6 public class fuck { 7 public static void main(String[] args) { 8 start(); 9 } 10 public static void start(){ 11 //定义变量 12 int sysBlueBallNum; //系统生成的篮球号码 13 int[] sysRedBallNum = new int[6];//系统生成的红球号码 14 int userBlueBallNum;//用户输入的篮球号码 15 int[] userRedBallNum = new int[6];//用户输入的红球号码 16 17 int blueBall = 0;//篮球号码是否正确 18 int redBallCount = 0;//红球号码正确的个数 19 20 Random r = new Random();//创建生成随机数的工具类 21 Scanner input = new Scanner(System.in); 22 23 int[] redNum = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33}; 24 25 //随机生成蓝球号码 26 sysBlueBallNum = r.nextInt(6)+1; 27 28 //随机生成红球号码 29 for(int i = 0;i<sysRedBallNum.length; i++){ 30 while(true){ 31 int index = r.nextInt(33); 32 if(redNum[index]!=0){ 33 sysRedBallNum[i] = redNum[index]; 34 redNum[index] = 0; 35 break; 36 } 37 } 38 } 39 40 //用户输入号码 41 System.out.println("双色球彩票选号开始。。。。。祝你好运!"); 42 System.out.println("请选择篮球号码(16选1):"); 43 userBlueBallNum = input.nextInt(); 44 System.out.println("请选择红球号码(33选6):"); 45 for(int i = 0; i<userRedBallNum.length; i++){ 46 userRedBallNum[i] = input.nextInt(); 47 } 48 49 50 //判断用户选择的号码跟系统生成的号码是否匹配 51 //------验证篮球 52 if(sysBlueBallNum==userBlueBallNum){ 53 blueBall = 1; 54 } 55 56 //-----验证红球 57 for(int i= 0;i<userRedBallNum.length;i++ ){ 58 for(int j = 0;j<sysRedBallNum.length;j++){ 59 if(userRedBallNum[i] == sysRedBallNum[j]){ 60 redBallCount++; 61 break; 62 } 63 } 64 } 65 66 check(blueBall,redBallCount); 67 68 bubbleSort(sysRedBallNum); 69 sysOut(sysRedBallNum,sysBlueBallNum); 70 } 71 72 //判断是否中奖了 73 public static void check(int blueBall, int redBallCount){ 74 if(blueBall==1 && redBallCount==6){ 75 System.out.println("恭喜你中了一等奖500万!"); 76 }else if(redBallCount==6){ 77 System.out.println("恭喜你中了二等奖!"); 78 }else if(blueBall==1 && redBallCount==5){ 79 System.out.println("恭喜你中了三等奖,3000元!"); 80 }else if(redBallCount==5 || (redBallCount==4 && blueBall==1)){ 81 System.out.println("恭喜你中了四等奖,200元!"); 82 }else if(redBallCount==4 || (redBallCount==3 && blueBall==1)){ 83 System.out.println("恭喜你中了五等奖,10元!"); 84 }else if(blueBall==1){ 85 System.out.println("恭喜你中了六等奖,5元!"); 86 }else{ 87 System.out.println("革命尚未成功,同志仍需努力"); 88 } 89 } 90 91 92 //公布本期中奖号码(将中奖号码进行排序) 93 public static void bubbleSort(int[] sysRedBallNum){ 94 int temp; 95 for(int i =0 ;i<sysRedBallNum.length-1;i++){ 96 for(int j =0; j<sysRedBallNum.length-1-i;j++){ 97 if(sysRedBallNum[j]>sysRedBallNum[j+1]){ 98 swap(sysRedBallNum,j,j+1); 99 } 100 } 101 } 102 } 103 104 //交换数据的方法 105 public static void swap(int[] arr,int a , int b){ 106 int temp = arr[a]; 107 arr[a] = arr[b]; 108 arr[b] = temp; 109 } 110 111 //输出本期中奖号码 112 public static void sysOut(int[] sysRedBallNum, int sysBlueBallNum){ 113 System.out.println("本期的中奖号码为:"); 114 System.out.println("红球:"); 115 for(int i = 0;i<sysRedBallNum.length;i++){ 116 System.out.print(sysRedBallNum[i]+" "); 117 } 118 System.out.println(); 119 120 System.out.println("篮球:"); 121 System.out.println(sysBlueBallNum); 122 } 123 }