Java-双色球

实现双色球先考虑整体思路:
1.随机生成7位数的数组为大奖号码(前6位红球每个数值取值范围为1~33,而且6个数值不能相同,第七位篮球取值范围为1~16)
2.判断购买号码为手动输入还是机选(如为手动输入,将用for循环一次从控制台输入一个依次数赋值到数组;如为机选,实现代码和 1. 中相同)
3.将大奖号码和购买号码的前6位红球分别实现升序排列
4.判断大奖号码和购买号码的号码匹配程度来确定得奖级别或者没有得奖,并将结果输出到控制台

实现代码具体如下:

//导包
import java.util.*;
class TestDouble01 
{
    public static void main(String[] args) 
    {
        Scanner s = new Scanner(System.in);
        Random ran = new Random();
        //随机生成大奖号码
        int arr2[]=new int[7];
        int shu =33;
        for (int i=0;i<arr2.length ;i++ )
        {
            boolean flag2=true;
            while (flag2)
            {
                if(i==6){
                    shu = 16;
                }
                int b = ran.nextInt(shu)+1;
                int num2=0;
                for (int j=0;j<arr2.length ;j++ )
                {
                    if (b==arr2[j])
                    {
                        num2++;
                    }
                }
                if (num2==0)
                {
                    arr2[i]=b;
                    flag2=false;
                }
            }
        }
        //判断购买号码的生成方式
        boolean flag=true;

        int arr1[]=new int[7];
        while(flag){
            System.out.println("请选择机选还是手选:1、机选;2、手选;3、退出  (请输入对应序号)");
            int xz=s.nextInt();
            if (xz == 1)
            {
                int shu1 = 33;
                //随机生成购买号码
                for (int i=0;i<arr1.length ;i++ )
                {
                    boolean flag1=true;
                    while (flag1)
                    {
                        if (i==6)
                        {
                            shu1=16;
                        }
                        int a = ran.nextInt(shu1)+1;
                        int num1=0;
                        for (int j=0;j<arr1.length ;j++ )
                        {
                            if (a==arr1[j])
                            {
                                num1++;
                            }
                        }
                        if (num1==0)
                        {
                            arr1[i]=a;
                            flag1=false;
                        }
                    }
                }
                flag=false;
            }else if (xz==2)
            {   
                //手动输入
                for (int i=0;i<arr1.length ;i++ )
                {
                    System.out.println("请输入第"+(i+1)+"个数:");
                    arr1[i]=s.nextInt();
                }
                s.close();
            }else if (xz==3)
            {
                //退出
                flag=false;
            }else{
                System.out.println("请输入正确的序号");
            }
        }
        //将随机的大奖数组前6位红球升序排列
        for(int j=0;j<=arr1.length-2;j++){
            for (int i = 0;i<arr1.length-2-j;i++ )
            {
                if (arr1[i]>arr1[i+1])
                {
                    arr1[i]=arr1[i]+arr1[i+1];
                    arr1[i+1]=arr1[i]-arr1[i+1];
                    arr1[i]=arr1[i]-arr1[i+1];
                }
            }
        }
        //将随机的购买数组前6位红球升序排列
        for(int j=0;j<=arr2.length-2;j++){
            for (int i = 0;i<arr2.length-2-j;i++ )
            {
                if (arr2[i]>arr2[i+1])
                {
                    arr2[i]=arr2[i]+arr2[i+1];
                    arr2[i+1]=arr2[i]-arr2[i+1];
                    arr2[i]=arr2[i]-arr2[i+1];
                }
            }
        }

        //输出打印大奖号码和购买号码
        System.out.println("购买号码为:"+Arrays.toString(arr1));
        System.out.println("大奖号码为:"+Arrays.toString(arr2));


        //判断奖项
        //查询两个数组中前6位数字相同的数量
        int num = 0;
        for (int i=0;i<arr1.length-1 ;i++ )
        {
            for (int j=0;j<arr2.length-1 ;j++ )
            {
                if (arr2[i]==arr1[j])
                {
                    num++;
                }
            }
        }
        //由相同的数字数量判断奖项
        System.out.println(num);
        System.out.println(arr1[6]==arr2[6]);
        if (arr1[6]==arr2[6])
        {
            if (num==6){
                System.out.println("恭喜您获得一等奖");
            }else if (num==5){
                System.out.println("恭喜您获得三等奖");
            }else if (num==4){
                System.out.println("恭喜您获得四等奖");
            }else if (num==3){
                System.out.println("恭喜您获得五等奖");
            }else if (num==2 || num==1 || num==0){
                System.out.println("恭喜您获得六等奖");
            }else{
                System.out.println("您未获奖,再接再厉");
            }
        }else{
            if (num==6){
                System.out.println("恭喜您获得二等奖");
            }else if (num==5){
                System.out.println("恭喜您获得四等奖");
            }else if (num==4){
                System.out.println("恭喜您获得五等奖");
            }else{
                System.out.println("您未获奖,再接再厉");
            }
        }
    }
}

代码运行结果如下:
这里写图片描述

由于获奖为概率问题,所以想获得到结果为大奖的几率很低,大多数为:“未获奖 ”属于正常现象。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现双色球预测需要以下步骤: 1. 获取历史开奖数据:通过网络爬虫等方式获取双色球历史开奖数据,包括每期开奖的红球和蓝球号码以及其他相关信息。 2. 数据预处理:对历史开奖数据进行处理,包括数据清洗、去除异常数据、统计每个号码出现的次数、计算各个号码的概率等。 3. 构建模型:选择适合双色球预测的模型,如神经网络、决策树等,根据预处理后的数据训练模型。 4. 预测结果:使用训练好的模型对未来一期的双色球号码进行预测,预测出红球和蓝球的号码。 示例代码如下: 1. 获取历史开奖数据 ```java public class DoubleBallData { private String date; //开奖日期 private int red1; //红球1 private int red2; //红球2 private int red3; //红球3 private int red4; //红球4 private int red5; //红球5 private int red6; //红球6 private int blue; //蓝球 //省略getter和setter方法 } ``` ```java public class DoubleBallCrawler { //获取网页内容的方法 private String getHtml(String url) { //使用HttpURLConnection或者HttpClient等方式获取网页内容 } //解析网页内容获取历史开奖数据 public List<DoubleBallData> getDoubleBallData(int startYear, int endYear) { List<DoubleBallData> dataList = new ArrayList<>(); for (int year = startYear; year <= endYear; year++) { String url = "http://kaijiang.zhcw.com/zhcw/html/ssq/list_" + year + ".html"; String html = getHtml(url); //使用Jsoup等方式解析html页面 //获取每一期的开奖数据,构造DoubleBallData对象并加入List中 } return dataList; } } ``` 2. 数据预处理 ```java public class DoubleBallUtils { //去除重复数据 public static List<DoubleBallData> removeDuplicate(List<DoubleBallData> dataList) { //使用HashSet等方式去除重复数据 } //统计每个号码出现的次数 public static Map<Integer, Integer> getNumberCount(List<DoubleBallData> dataList) { //遍历每一期开奖数据,统计每个号码出现的次数 } //计算各个号码的概率 public static Map<Integer, Double> getNumberProbability(Map<Integer, Integer> countMap, int totalCount) { //遍历每个号码的出现次数,计算其概率 } } ``` 3. 构建模型 ```java public class DoubleBallPredictor { private Map<Integer, Double> redProbabilityMap; //红球概率 private Map<Integer, Double> blueProbabilityMap; //蓝球概率 public DoubleBallPredictor(Map<Integer, Double> redProbabilityMap, Map<Integer, Double> blueProbabilityMap) { this.redProbabilityMap = redProbabilityMap; this.blueProbabilityMap = blueProbabilityMap; } //预测下一期双色球号码 public void predict() { List<Integer> redList = new ArrayList<>(); List<Integer> blueList = new ArrayList<>(); //根据红球概率和蓝球概率随机生成红球和蓝球号码 //将生成的号码输出 } } ``` 4. 预测结果 ```java public class Main { public static void main(String[] args) { DoubleBallCrawler crawler = new DoubleBallCrawler(); List<DoubleBallData> dataList = crawler.getDoubleBallData(2010, 2020); dataList = DoubleBallUtils.removeDuplicate(dataList); Map<Integer, Integer> countMap = DoubleBallUtils.getNumberCount(dataList); Map<Integer, Double> probabilityMap = DoubleBallUtils.getNumberProbability(countMap, dataList.size()); DoubleBallPredictor predictor = new DoubleBallPredictor(probabilityMap, probabilityMap); predictor.predict(); } } ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值