玩法说明: 双色球投注区分为红球号码区和蓝球号码区,红球号码范围为1~ 33,蓝球号码范围为1~16,双色球每期从33个红球中开出6个号码,从16个蓝球中开出1个号码作为中奖号码,双色球玩法即是竞猜开奖号码的6个红球号码和1个蓝球号码,顺序不限。
分析: 1、产生红球和蓝球 2、接收用户选号 3、验证是否中奖 4、公布本期中奖号码
实现步骤: 1、整体实现思路 2、随机取值不重复算法(分为系统部分和用户部分) 3、判断是否中奖的逻辑 4、输出结果
java实现:
import java.util.Random; import java.util.Arrays; import java.util.Scanner; public class hello { public static void main(String args[]){ //定义相关的变量 int[] userRedBall = new int[6]; //用户选择的红球号码 int[] systemRedBall = new int[6]; //系统生成的红球号码 int userBlueBall = 0; //用户选择的蓝球 int systemBlueBall = 0; //系统生成的蓝球 int redCount = 0; //记录用户选择正确的红球数 int blueCount = 0; //记录用户选择正确的蓝球数 int[] redBall = new int[33]; //用于存储1-33的红球号码 //需要随机生成6个在1-33之间不重复的数(算法) for(int i=0;i<redBall.length;i++) { redBall[i] = i+1; } //游戏开始,系统提示 System.out.println("双色球游戏开始,good luck!"); System.out.println("请问您是要机选还是手选号码(1:机选,2:手选):"); Scanner input = new Scanner(System.in); Random r = new Random();//生成随机数 boolean flag = true;//判断输入的格式是否有误 while(flag) { int isAuto = input.nextInt(); switch(isAuto) { case 1: //机选 computerSelection(redBall,userRedBall);//机选红球 userBlueBall = r.nextInt(16)+1;//机选蓝球 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个蓝球号码(1-16):"); userBlueBall = input.nextInt(); flag = false; break; default: System.out.println("请问您是要机选还是手选号码(1:机选,2:手选):"); break; } } //系统随机生成号码 //红球 computerSelection(redBall,systemRedBall); //蓝球 systemBlueBall = r.nextInt(16)+1; //统计结果: //统计红球 for(int i=0;i<userRedBall.length;i++) { for(int j=0;j<systemRedBall.length;j++) { if(userRedBall[i]==systemRedBall[j]) { int temp = systemRedBall[j]; systemRedBall[j] = systemRedBall[systemRedBall.length-1-redCount]; systemRedBall[systemRedBall.length-1-redCount] = temp; redCount++; break; } } } //统计蓝球 if(userBlueBall==systemBlueBall) { blueCount = 1; } //验证是否中奖(把条件成功率高的放前面,这样效率高) 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("系统有误,中奖无效!"); } //公布系统号码 System.out.println("本期中奖红球号码为:"); sort(systemRedBall); System.out.println(Arrays.toString(systemRedBall)); System.out.println("本期中奖蓝球号码为:"+systemBlueBall); //公布用户号码 System.out.println("您选择的红球号码为:"); sort(userRedBall); System.out.println(Arrays.toString(userRedBall)); System.out.println("您选择的蓝球号码为:"+userBlueBall); } //冒泡排序 public static void sort(int[] ball) { for(int i=0;i<ball.length-1;i++) { for(int j=0;j<ball.length-1;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]; } } } } //用于在指定数列中,随机生成多个不重复的数算法 public static void computerSelection(int[] redBall,int[] userRedBall) { Random r = new Random(); int index = -1; for(int i=0;i<userRedBall.length;i++) { index = r.nextInt(redBall.length-i); userRedBall[i] = redBall[index]; int temp = redBall[index]; redBall[index] = redBall[redBall.length-1-i]; redBall[redBall.length-1-i] = temp; } } }