Java实现双色球机选投注, 简易版

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);
    }

}

3、运行效果

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值