[Java] 双色球(数组和 HashSet)
作者:互联网
标题
1. 双色球投注开奖小程序
a. 获取用户输入
红球:1-33中选择6个。(默认用户输入的号码不会重复)
蓝球:1-16中选择1个。
b. 随机生成中奖号码
1-33 中随机生成6个数,不能重复。
1-16 中随机生成1个数。
c. 中奖规则
红球一共6个,从1-33中抽取,六个互相不重复。
然后蓝球是从1-16中抽取一个数字,这整个组成的双色球开奖号码。
一等奖(6+1):红球33选6,蓝球16选1;
二等奖(6+0):红球33选6;
三等奖(5+1):红球33选5,蓝球16选1;
四等奖(5+0、4+1):红球33选5 或者 红球33选4,蓝球16选1;
五等奖(4+0、3+1):红球33选4 或者 红球33选3,蓝球16选1;
六等奖(2+1、1+1、0+1):红球33选2,蓝球16选1 或者 红球33选1,蓝球16选1 或者蓝球16选1;
2. Java 实现
a. 方法1. Array
package ColorBall.src.array;
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
/*
* 主界面
*/
public class test {
public static void main(String[] args) {
//红球下注
int[] buyRedBalls = buyRedBalls();
//蓝球下注
Scanner sc = new Scanner(System.in);
System.out.println("请输入下注的蓝球号码(1-16):");
int buyBlue = sc.nextInt();
//红球开奖号码
int[] redBalls = getRedBalls();
//蓝球开奖号码
Random r = new Random();
int blue = r.nextInt(16) + 1;
//显示下注号码
System.out.println("您下注的红球号码为:" + Arrays.toString(buyRedBalls));
System.out.println("您下注的蓝球号码为:" + buyBlue);
//显示开奖号码:
System.out.println("开奖的红球号码为:" + Arrays.toString(redBalls));
System.out.println("开奖的蓝球号码为:" + blue);
//统计红球中奖个数
int redCount = checkBalls(redBalls, buyRedBalls);
System.out.println("中奖的红球个数:" + redCount);
//统计蓝球中奖个数
int blueCount = buyBlue == blue ? 1 : 0;
System.out.println("中奖的蓝球个数:" + blueCount);
//统计中奖结果
/*
一等奖(6+1):红球33选6,蓝球16选1;
二等奖(6+0):红球33选6;
三等奖(5+1):红球33选5,蓝球16选1;
四等奖(5+0、4+1):红球33选5 或者 红球33选4,蓝球16选1;
五等奖(4+0、3+1):红球33选4 或者 红球33选3,蓝球16选1;
六等奖(2+1、1+1、0+1):红球33选2,蓝球16选1 或者 红球33选1,蓝球16选1 或者蓝球16选1;
*/
if (redCount == 6 && blueCount == 1) {
System.out.println("恭喜你中了一等奖");
} else if (redCount == 6) {
System.out.println("恭喜你中了二等奖");
} else if (redCount == 5 && blueCount == 1) {
System.out.println("恭喜你中了三等奖");
} else if (redCount == 5 || (redCount == 4 && blueCount == 1)) {
System.out.println("恭喜你中了四等奖");
} else if (redCount == 4 || (redCount == 3 && blueCount == 1)) {
System.out.println("恭喜你中了五等奖");
} else if ((redCount == 2 && blueCount == 1) || (redCount == 1 && blueCount == 1) || blueCount == 1) {
System.out.println("恭喜你中了六等奖");
} else {
System.out.println("感谢您为福利事业做出的贡献!");
}
}
//统计红球中奖个数
public static int checkBalls(int[] redBalls, int[] buyBalls) {
int count = 0;
for (int i = 0; i < buyBalls.length; i++) {
for (int j = 0; j < redBalls.length; j++) {
if (buyBalls[i] == redBalls[j]) {
count++;
}
}
}
return count;
}
//模拟用户下注红球的过程
public static int[] buyRedBalls() {
int[] arr = new int[6];
Scanner sc = new Scanner(System.in);
for (int i = 0; i < arr.length; i++) {
System.out.println("请输入第" + (i + 1) + "个红球(1-33):");
arr[i] = sc.nextInt();
}
//排序(方便查看)
Arrays.sort(arr);
return arr;
}
//随机生成1-33之间的不重复的6个整数(红球的开奖号码)
public static int[] getRedBalls() {
int[] arr = new int[6];
Random r = new Random();
int index = 0;
//为第一个元素赋值
arr[index] = r.nextInt(33) + 1;
wc:
while (true) {
//生成随机数
int num = r.nextInt(33) + 1;
//判断num是否重复
for (int i = 0; i <= index; i++) {
if (num == arr[i]) {
continue wc;
}
}
//如果执行到这里,说明不重复,存到数组中
arr[++index] = num;
//如果index为5,说明6个元素全部存满
if (index == 5) {
break wc;
}
}
//排序(方便查看)
Arrays.sort(arr);
//返回数组
return arr;
}
}
b. 方法2. HashSet
i. main
package ColorBall.src.hashset;
import java.util.HashSet;
/*
* 主界面, 测试方法
*/
public class test {
public static void main(String[] args) {
//下注
Ticket t = new Ticket();
t.buyTicket();
DoubleBall db = new DoubleBall();
db.randomNum();
//查看结果
db.show();
//开奖
t.showTicket();
showResult(db,t);
}
//兑奖的过程
public static void showResult(DoubleBall db, Ticket t){
//开奖的红球
HashSet<Integer> redBalls = db.getRedBalls();
//下注的红球
HashSet<Integer> redNums = t.getRedNums();
//统计红球的中奖个数
int redCount = 0;
for(Integer num :redNums){
boolean flag = redBalls.contains(num);
if(flag){
redCount++;
}
}
//统计蓝球的个数
int blueCount = 0;
//开奖的蓝球
Integer blueBall = db.getBlueBall();
//下注的蓝球
Integer blueNums = t.getBlueNums();
if(blueBall==blueNums){
blueCount=1;
}
System.out.println("中奖的红球个数:"+redCount);
System.out.println("中奖的蓝球个数"+blueCount);
if(redCount==6 && blueCount==1){
System.out.println("恭喜你,中了一等奖");
}else if(redCount==6 && blueCount==0){
System.out.println("恭喜你,中了二等奖");
}else if(redCount==5 && blueCount==1){
System.out.println("恭喜你,中了三等奖");
}else if(redCount==5 ||( redCount==4 && blueCount==1)){
System.out.println("恭喜你,中了四等奖");
}else if(redCount==4 ||( redCount==3 && blueCount==1)){
System.out.println("恭喜你,中了五等奖");
}else if((redCount==2 && blueCount==1)||(redCount==1 && blueCount==1) || blueCount==1){
System.out.println("恭喜你,中了六等奖");
}else{
System.out.println("感谢您为福利事业做出的贡献");
}
}
}
ii. ticket
package ColorBall.src.hashset;
/*
* 模拟进行投注(即买票)的操作
*/
import java.util.Arrays;
import java.util.HashSet;
import java.util.Scanner;
public class ticket {
//投注时的红球
private HashSet<Integer> redNums = new HashSet<>();
//投注时篮球
private Integer blueNums;
public HashSet<Integer> getRedNums() {
return redNums;
}
public Integer getBlueNums() {
return blueNums;
}
//实现用户下注的方法
public void buyTicket() {
//控制台录入数据
//获取键盘输入
Scanner sc = new Scanner(System.in);
int i = 1;
//选号 红球
while (true) {
System.out.println("请输入第" + i + "个红球号码:");
int redNum = sc.nextInt();
if (redNum >= 1 && redNum <= 33) {
//放到集合里面
boolean flag = redNums.add(redNum);
if (flag) {
//添加成功
i++;
if (i == 7) {
break;
}
} else {
System.out.println("你输入的号码重复了,请重新输入");
}
} else {
System.out.println("输入的号码无效,请重新输入");
}
}
//选号 蓝球
while (true) {
System.out.println("请输入蓝球号码:");
int num = sc.nextInt();
if (num >= 1 && num <= 16) {
blueNums = num;
break;
} else {
System.out.println("输入的号码无效,请重新输入");
}
}
}
//显示用户下注号码的方法
public void showTicket() {
Integer[] arr = new Integer[6];
redNums.toArray(arr);
Arrays.sort(arr);
String s = Arrays.toString(arr);
System.out.println("下注的红球号码是:" + s);
System.out.println("下注的蓝球号码是:" + blueNums);
}
}
iii. doubleBall
package ColorBall.src.hashset;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Random;
/*
* 代表双色球开奖的操作
*/
public class doubleBall {
//红球
private HashSet<Integer> redBalls = new HashSet<>();
//篮球
private Integer blueBall;
public HashSet<Integer> getRedBalls() {
return redBalls;
}
public Integer getBlueBall() {
return blueBall;
}
//随机产生6个红球和1个蓝球的方法,模拟开奖
public void randomNum() {
Random r = new Random();
//随机产生6个红球 (1-33)之间的6个随机数
while (true) {
int num = r.nextInt(33) + 1; //[1-33]
redBalls.add(num);
if (redBalls.size() == 6) {
break;
}
}
//生成1-16之间的数字,蓝球的号码
blueBall = r.nextInt(16) + 1;
}
//显示开奖的号码
public void show() {
Integer[] arr = new Integer[6];
redBalls.toArray(arr);
//对开奖号码排序
Arrays.sort(arr);
String s = Arrays.toString(arr); //Ctrl + 1
System.out.println("开奖的红球号码是:" + s);
System.out.println("开奖的蓝球号码是:" + blueBall);
}
}
Regino
发布了59 篇原创文章 · 获赞 59 · 访问量 1533
私信
关注
标签:双色球,Java,红球,33,HashSet,System,蓝球,println,out 来源: https://blog.csdn.net/Regino/article/details/104522208