1、整体思路
简易实现,不考虑精确概率问题,所以采用不重复随机法随机产生红色号码球和蓝色号码球;
1)确定随机范围;
2)每次产生一个球,所以需要一个随机产生一个球的方法;
3)将产生的球组成一组,且要按照用户输入的条件来生成;
4)可满足大于等于1的任意投注数,大于等于6个红色球的任意复式投注。大于等于1的蓝色球任意复式投注数。
2、完整代码
package com.ht.publicc.common.util;
import java.util.*;
import java.util.stream.Collectors;
/**
* 双色球工具类
* @Author:
* @Date:2023/11/22 9:26
*/
public class UnionLottoUtil {
public static final int RED_BALL = 32;
public static final int BLUE_BALL = 15;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("双色球投注机选,输入任意键,按【Enter】开始");
scanner.next();
System.out.println("=======开始==========");
System.out.println("请输入投注数:");
int bet = scanner.nextInt();
System.out.println("请输入红球投注个数(不小于6个):");
int redNum = scanner.nextInt();
if (redNum < 6) {
redNum = 6;
System.out.println("红球个数小于5,已为您改为默认数6个");
}
System.out.println("请输入蓝球投注个数(不小于1个):");
int blueNum = scanner.nextInt();
if (blueNum < 1) {
blueNum = 1;
System.out.println("篮球个数小于1个。已为您改为默认数1个");
}
Map<Integer, String> map = create(bet, redNum, blueNum);
for (Map.Entry<Integer, String> entry : map.entrySet()) {
System.out.println("(" + entry.getKey() + "): " + entry.getValue());
}
}
/**
* 生成双色球号码
* @param bet 投注数
* @param redNum 红球复式数,不小于6个
* @param blueNum 篮球复式数,不小于1个
* @return
*/
public static Map<Integer, String> create(int bet, int redNum, int blueNum) {
Map<Integer, String> map = new HashMap<>();
int i = 1;
while (map.size() < bet) {
Set<Integer> redBall = getBall(redNum, RED_BALL);
List<Integer> collect = redBall.stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList());
Set<Integer> blueBall = getBall(blueNum, BLUE_BALL);
List<Integer> blueCollect = blueBall.stream().sorted(Comparator.naturalOrder()).collect(Collectors.toList());
StringBuffer buffer = new StringBuffer();
for (Integer red : collect) {
buffer.append(red).append(" ");
}
buffer.append(" | ");
for (Integer bule : blueCollect) {
buffer.append(bule).append(" ");
}
map.put(i, buffer.toString());
i++;
}
return map;
}
/**
* 获取一组号码球
* @param ballNum 机选几个球
* @param ballType 机选篮球或红球
* @return
*/
public static Set<Integer> getBall(int ballNum, int ballType) {
Set<Integer> set = new HashSet<>();
while (set.size() < ballNum) {
set.add(getOneBall(ballType));
}
return set;
}
/**
* 获取一个号码球
* @return
*/
public static Integer getOneBall(int ballNum) {
return (int)(Math.random() * ballNum + 1);
}
}