Java基础之双⾊球玩法
⼀、双⾊球玩法
玩法说明:
双⾊球投注区分为红球号码区和蓝球号码区,红球号码范围为01~33,蓝球号码范围为01~16。双⾊球每期从33个红球中开出6个号码,从16个蓝球中开出1个号码作为中奖号码,双⾊球玩法即是竞猜开奖号码的6个红球号码和1个蓝球号码,顺序不限。
⼆、案例分析:
1、如何产⽣蓝球和红球?
2、如何接收⽤户选号?
3、如何验证是否中奖?
4、公布本期中奖号码?
三、实现步骤:
1、整体实现思路
2、随机取值不重复算法(系统和⽤户)
3、判断是否中奖的逻辑
4、结果输出
⾸先了解⼀个算法
如何加盟
在⼀堆数中随机取出⼏个数且做到不重复取数怎么效率⾼
每次取出⼀个数放⼊a数组后将那个数放到数组shuzu的最后⾯之后再取数时只取前边的就不重复了⽽且还提⾼速度
int[] a =new int[6];//取六个数放⼊a数组不能重复
int[] shuzu=new int[33];//这⼀堆数有三⼗三个
for(int i =0; i < shuzu.length; i++){//初始化⼀下
shuzu[i]= i +1;
}
public static void Random_number(int[] shuzu,int[] a){
Random r =new Random();
int index =-1;
for(int i =0; i < a.length; i++){//取6个循环6次
index = r.nextInt(shuzu.length - i);
a[i]= shuzu[index];
int temp = shuzu[index];
shuzu[index]= shuzu[shuzu.length -1- i];
//注意这个地⽅要减去 i 因为放到后⾯的数不是就⼀个每循环⼀次就加⼀个
//所以要发⽣交换的是当前在使⽤的数组的最后⼀个注意这个
shuzu[shuzu.length -1- i]= temp;
}
}
这个意思就是 index这个索引值可能重复 但是index下标所代表的内容数组shuzu[index]确不会重复因为⽐如第⼀次随机到了index = 16 那么 shuzu[index] = 17
所以a[0] = 17; 会把17 这个数 与 当前索引值最后⼀位 32交换 值为 33
即 此时 shuzu[16] = 17 shuzu[32] = 33
交换后 shuzu[16] = 33 shuzu[32] = 17
index 再次取值 会从0 - 31 之间取值 所以不会再取到32 因此也不会⽤到内容17
代码
package Stringlei;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/*
*@author Shishuai E-mail:1198319583@qq
*@version Create time : 2019年4⽉1⽇下午8:15:43
*类说明:
*  1.⽤户选择是机选还是⼿选号码
*  2.接收⽤户选号(6红1蓝)
*  3.⽣成系统号码(6红1蓝)
*  4.⽐较系统号码和⽤户号码,记录个数
*  5.验证是否中奖
湖北省旅游景点大全
*  6.系统号码排序
*  7.公布结果
*/
public class Shuangseqiu {
public static void main(String[] args){
Scanner input =new Scanner(System.in);
// ============
// 定义相关变量
int[] userRedBall =new int[6];// ⽤户选择的红球号码
int[] sysRedBall =new int[6];// 系统⽣成的红球号码
int userBlueBall =0;// ⽤户选择的蓝球
int sysBlueBall =0;// 系统⽣成的蓝球
int redCount =0;// 记录⽤户选择正确的红球数
int blueCount =0;// 记录⽤户选择正确的蓝球数
int[] redBall =new int[33];// ⽤于存储1·33的红球号码
/
/ 需要随机⽣成6个在1~33之间不重复的数
/* 算法详解15六分钟左右 */
for(int i =0; i < redBall.length; i++){
redBall[i]= i +1;
// 游戏开始系统提⽰
// ⽤户选择球
System.out.println("双⾊球游戏开始 Good Luck");
System.out.println("请问您是要机选还是⼿选号码(1:机选 2:⼿选)");
boolean flag =true;//⽤于判断是否要重新输⼊机选或⼿选
//意思就是除了1 和 2 之外的数都必须重新输⼊
Random r =new Random();//⽣成随机数的⼯具
while(flag){
int isAuto = Int();
switch(isAuto){
case1:
// 机选
computerSelection(redBall, userRedBall);
userBlueBall = r.nextInt(16)+1;// 机选蓝球
flag =false;
break;
case2:
// ⼿选
System.out.println("请选择6个红球号码(1~33):");
for(int i =0; i < userRedBall.length; i++){
userRedBall[i]= Int();
}
System.out.println("请选择1个蓝球号码(1~16):");
userBlueBall = Int();
flag =false;
break;
default:
System.out.println("请问您是要机选还是⼿选号码(1:机选 2:⼿选)");
break;
}
}
// ==============系统随机⽣成号码
// 红球
computerSelection(redBall, sysRedBall);
// 蓝球
sysBlueBall = r.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++; }
* } }把⽐较出来相同的放到后⾯长度减⼀以后就不⽐较了
*/
for(int i =0; i < userRedBall.length; i++){
for(int j =0; j < sysRedBall.length - redCount; j++){
// 把⽐较出来相同的放到后⾯长度减⼀以后就不⽐较了
if(userRedBall[i]== sysRedBall[j]){
redCount++;
int temp = sysRedBall[j];
sysRedBall[j]= sysRedBall[sysRedBall.length -1- redCount];
sysRedBall[sysRedBall.length -1- redCount]= temp;
//sysRedBall.length -= 1;//这个忘记减去1了后来⼜加上的不知道加对了没不对不对数组长度不能运算//在循环的时候把⽐较过的减去减去redCount是后来写上的检查出来的错误以前没写
// 这个下标注意是如果有两次⽐较成功后⾯就2个不⽐较的了
//就是已经有两个球相同了就是⽐较到了两次成功的就把这个两个都放到数组后⾯就不⽐较了
// 所以redCount = 2 减2 始终和最后⼀个数交换位置 (除了不要的)
break;
}
}
//============统计蓝球
二开头的吉利四字成语if(userBlueBall == sysBlueBall){
blueCount =1;
zhangjiani
}
//=================================
//验证是否中奖(从⼏率⼤的开始执⾏)
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 ==2&& redCount ==6){
System.out.println("中了⼀等奖 500W!");
世界大学排名}else{
System.out.println("系统有误, 中将⽆效!");
}
// 公布系统号码
System.out.println("本期中奖红球号码为:");
sort(sysRedBall);
System.out.String(sysRedBall));
System.out.println("本期中奖蓝球号码为:"+ sysBlueBall);
//公布⽤户号码
System.out.println("您选择的红球号码为:");
sort(userRedBall);
System.out.String(userRedBall));
System.out.println("您选择的蓝球号码为:"+ userBlueBall);
System.out.println("谢谢参与幸福你我他");
}
//冒泡排序
public static void sort(int[] ball){
for(int i =0; i < ball.length -1; i++){
for(int j =0; j < ball.length -1- i; 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;
}
}
⼜敲了⼀遍
package Stringlei;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/*
*@author Shishuai E-mail:1198319583@qq
*@version Create time : 2019年4⽉15⽇下午8:27:29 *类说明:对象与数组案例
*/
public class ObjectAndArrays {
public static void main(String[] args){
Scanner input =new Scanner(System.in);
//定义各种变量
int[] userRedBall =new int[6];