纯java原生态模拟双色球、大乐透规则进行出球,原理:比如双色球,红球33.蓝球16个,先进行红球出球计算,按照双色球出球的规则随机将33个球放入数组或集合中,规定一个出球的方向,随机数12个绑定33个数,比如规定6点钟方向出球,则随机数与绑定的随机数相等时则将随机数绑定的33个数中的那个数出去,完成出球,即2次随机数相等则出球。其中也加入了开始摇球是速度是很快的,但运行一段时间后减慢速度以便出球,这和双色球真实开奖出球差不多。
本人亲测,随便猜一组号码,猜中概率最好也得好几万次,最坏的情况就得几百万次。
有兴趣的小伙伴也可以直接弄个Android开发包,做个app,可以在手机上面玩。
不想自己写程序的小伙伴,可以访问:
https://www.uwanyi.com
郑重声明:此算法只供娱乐,不做实际参考。

import java.util.*;/*** 彩票算法* Created by jesonking * 双色球 6点钟方向出球* 大乐透 12点方向* 功能1:普通生成号码预测,并给出高频号码* 1、参数:彩票类型,输出次数,高频红球输出个数,高频蓝球输出个数* 功能2:根据当期开奖号码,预测下次号码。若最高100万次还未匹配到中奖号码则自动给出一组号码* 2、参数:当期开奖号码,匹配次数:10000,100000,1000000*/
public class CaipiaoCal {public static void main(String[] args) {printfCP(1,2000);//printfCP(2,200);//根据当前号码预测下一次号码/* String currentCaipiao = "04,05,06,13,18,21";//String currentCaipiao = "07,08,13,19,29,11,12";String[] strs=currentCaipiao.split(",");List list= Arrays.asList(strs);*//* String logcaipiao = getOneCPByLot(2,100);System.out.println(logcaipiao);logcaipiao = getOneCPByLot(1,100);*///System.out.println("双色球:"+nextCaipiao(logcaipiao,2,1000000) + ",高频彩票:" + logcaipiao);//System.out.println("大乐透:"+nextCaipiao(currentCaipiao,2,100));//nextCaipiao(logcaipiao.substring(1,logcaipiao.length()-1),1,1000000,6);/*String currentCaipiao = "06,08,09,13,19,22,10";nextCaipiao(currentCaipiao,1,500000,6);*///System.out.println(logcaipiao);//getOftenAppearCaipiao(1,20,100000,6);}/*** 通过高频数字组合获取一组号码,规则是* 3,2,1. 前5个高频中选3个,前6到10中选2个,11-15以后的选一个* 大乐透是3,1,1* 蓝球:从前5个中选一个或者2个* @param type 1:双色球  2:大乐透* @param execTime 执行多少次,进行计算输出* @return*/private static String getOneCPByLot(int type,int execTime){List<String> resultList = new ArrayList<>();int redNum = 33;int blueNum = 16;if(type == 2){redNum = 35;blueNum = 12;}Map<String,String> lotMap = printfCP(type,execTime,redNum,blueNum);List<String> redList = new ArrayList<>();String redStr = lotMap.get("redLotStr");redStr = redStr.substring(1,redStr.length() -1);String blueStr = lotMap.get("blueLotStr");blueStr = blueStr.substring(1,blueStr.length() -1);String[] redArr = redStr.split(",");//获取前三个List<Integer> list12 = getRandomNumList(3,0,5);redList.add(redArr[list12.get(0)].trim());redList.add(redArr[list12.get(1)].trim());redList.add(redArr[list12.get(2)].trim());//获取前2个或1个List<Integer> list24 = null;if(type == 1){list24 = getRandomNumList(2,5,10);redList.add(redArr[list24.get(0)].trim());redList.add(redArr[list24.get(1)].trim());}else{list24 = getRandomNumList(1,5,10);redList.add(redArr[list24.get(0)].trim());}//最后一个List<Integer> list24Over = getRandomNumList(1,10,15);redList.add(redArr[list24Over.get(0)].trim());Collections.sort(redList);resultList.addAll(redList);//获取蓝球List<String> blueList = new ArrayList<>();String[] blueArr = blueStr.split(",");List<Integer> list12Or16 = null;if(type == 1){list12Or16 = getRandomNumList(1,0,5);blueList.add(blueArr[list12Or16.get(0)].trim());}else{list12Or16 = getRandomNumList(2,0,5);blueList.add(blueArr[list12Or16.get(0)].trim());blueList.add(blueArr[list12Or16.get(1)].trim());}Collections.sort(blueList);resultList.addAll(blueList);return resultList.toString();}/*** 默认* 随机打印多少组彩票* @param type 1:双色球  2:大乐透* @param num 打印次数*/private static Map<String,String> printfCP(int type,int num){return printfCP(type,num,10,5);}/*** 随机打印多少组彩票* @param type 1:双色球  2:大乐透* @param num 打印次数* @param redNum 红球高频输出次数  redLotStr* @param blueNum 蓝球高频输出次数 blueLotStr*/private static Map<String,String> printfCP(int type,int num,int redNum,int blueNum){List<String> lotRedList = new ArrayList<>();//存放红球List<String> lotLanList = new ArrayList<>();//存放蓝球List<String> ssqList = null;List<String> dltList = null;for(int i = 0;i <num;i++){if(type == 1){ssqList = shuangSeQiu();autoFenPei(ssqList,lotRedList,lotLanList,type);System.out.println("双色球" + (i + 1) +":" + ssqList.toString());}else{dltList = daLeTou();autoFenPei(dltList,lotRedList,lotLanList,type);System.out.println("大乐透" + (i + 1) +":" + dltList.toString());}}List<String> redNumList = handlerLotNum(lotRedList,redNum);List<String> blueNumList = handlerLotNum(lotLanList,blueNum);System.out.println("出现的高频红球数字:" + redNumList.toString());System.out.println("出现的高频蓝球数字:" + blueNumList.toString());Map<String,String> resultMap = new HashMap<>();resultMap.put("redLotStr",redNumList.toString());resultMap.put("blueLotStr",blueNumList.toString());return resultMap;}/*** 自动红球和篮球分到对应的集合中* @param qiuList* @param type* @return*/private static void autoFenPei(List<String> qiuList,List<String> redList,List<String> blueList,int type){redList.add(qiuList.get(0));redList.add(qiuList.get(1));redList.add(qiuList.get(2));redList.add(qiuList.get(3));redList.add(qiuList.get(4));if(type == 1){redList.add(qiuList.get(5));}else{blueList.add(qiuList.get(5));}blueList.add(qiuList.get(6));}public static String nextCaipiao(String currentCaipiao,int type){int execTime = 1000000;return nextCaipiao(currentCaipiao,type,execTime);}/*** 获取随机中最快出现的一组数据* @param type 彩票类型* @param forNum 循环次数* @param execTime 检测循环次数* @param num 匹配几个号码* @return 返回最快出现的一组号码*/public static String getOftenAppearCaipiao(int type,int forNum,int execTime,int num){String result = "";String oneHaoMa = "";int min = execTime;//开始计算的时候,就设置循环执行的次数for(int k=0;k<forNum;k++){if(type == 1){oneHaoMa = shuangSeQiu().toString();}else{oneHaoMa = daLeTou().toString();}oneHaoMa = oneHaoMa.substring(1,oneHaoMa.length()-1);int tempCount = nextCaipiao(oneHaoMa,type,execTime,num);if(tempCount < min){min = tempCount;result = oneHaoMa;System.out.println("最快出现的一组:" + result + ",找到所需次数:" +min);}}return result;}/*** 给出当前的彩票号码,预测计算出下一次号码* @param currentCaipiao* @param type 1:双色球  2:大乐透*  @param execTime 如果一直未找到,则执行多少次后,返回一组号码   默认1百万*  @param num 匹配几个号码即为找到,因为7个太难找到了* @return 返回匹配执行的次数*/public static int nextCaipiao(String currentCaipiao,int type,int execTime,int num){String ssq = null;String dlt = null;int count = 0;//进行多少次运算String[] strs=currentCaipiao.split(",");List<String> oldlist= Arrays.asList(strs);List<String> ssqList = null;List<String> dltList = null;while (true){count++;int tempNum = 0;//用于计数,对应几个球if(type == 1){ssqList = shuangSeQiu();int ssqLen = ssqList.size();int oldLen = oldlist.size();for(int i=0;i<ssqLen-1;i++){for(int j=0;j<oldLen-1;j++){if(ssqList.get(i).trim().equals(oldlist.get(j).trim())){tempNum += 1;}}}if(num == 7){if(ssqList.get(ssqLen-1).trim().equals(oldlist.get(oldLen-1).trim())){tempNum += 1;}}if(tempNum >= num){System.out.println("匹配的一组双色球是:"+ssqList.toString());break;}}else{dltList = daLeTou();for(int i=0;i<5;i++){for(int j=0;j<5;j++){if(dltList.get(i).trim().equals(oldlist.get(j).trim())){tempNum += 1;}}}if(num >= 6 && tempNum == 5){for(int i=5;i<7;i++){for(int j=5;j<7;j++){if(dltList.get(i).trim().equals(oldlist.get(j).trim())){tempNum += 1;}}}}if(tempNum >= num){System.out.println("匹配的一组大乐透是:"+dltList.toString());break;}}//System.out.println("次数:" + count);if(count > execTime){//1百万次还没有找到就随机返回一组彩票号码break;}}//handlerLotNum(dataList);/*if(type == 1){return shuangSeQiu().toString();}else{return daLeTou().toString();}*/return count;}/*** 给出当前的彩票号码,预测计算出下一次号码* @param currentCaipiao* @param type 1:双色球  2:大乐透*  @param execTime 如果一直未找到,则执行多少次后,返回一组号码   默认1百万* @return*/public static String nextCaipiao(String currentCaipiao,int type,int execTime){String ssq = null;String dlt = null;int count = 0;//进行多少次运算List<String> dataList = new ArrayList<>();//用于存放每次的出球List<String> ssqList = null;List<String> dltList = null;while (true){count++;if(type == 1){ssqList = shuangSeQiu();dataList.addAll(ssqList);ssq = ssqList.toString();if(currentCaipiao.equals(ssq)){break;}}else{dltList = daLeTou();dataList.addAll(dltList);dlt = dltList.toString();if(currentCaipiao.equals(dlt)){break;}}System.out.println("次数:" + count);if(count > execTime){//1百万次还没有找到就随机返回一组彩票号码break;}}//handlerLotNum(dataList);if(type == 1){return shuangSeQiu().toString();}else{return daLeTou().toString();}}/*** 双色球* @return*/public static List<String> shuangSeQiu(){int direct = 6;//6点钟方向//红球int redNum = 6;//红色个数int redLen = 33;int blueNum = 1;//蓝色个数int blueLen = 16;return caiPiaoList(direct,redNum,redLen,blueNum,blueLen);}/*** 大乐透* @return*/public static List<String> daLeTou(){int direct = 12;int redNum = 5;//红色个数int redLen = 35;int blueNum = 2;//蓝色个数int blueLen = 12;return caiPiaoList(direct,redNum,redLen,blueNum,blueLen);}/*** 一组彩票数据 大乐透或双色球* @param direct 几点钟方向出球* @param redNum 红色数量 出球* @param redLen 红色球总数量* @param blueNum 蓝色数量 出球* @param blueLen 蓝色球总数量* @return*/public static List<String> caiPiaoList(int direct,int redNum,int redLen,int blueNum,int blueLen){List<String> redList = cal(redLen,direct,redNum);Collections.sort(redList);List<String> blueList = cal(blueLen,direct,blueNum);Collections.sort(blueList);redList.addAll(blueList);return redList;}/*** 出球红球或篮球数组* @param len 长度* @param direct 方向* @param num 出几个球* @return*/private static List<String> cal(int len,int direct,int num){List<String> oldBall = new ArrayList<>();//已出球for(int i = 1; i <= num; i++){oldBall.add(outBall(len,direct,200,oldBall));}return oldBall;}/**** 出球* @param len 篮球或红球的数组长度* @param direct 几点钟方向出球 双色球 6点,大乐透12点* @param time 降慢执行速度,以便出球* @param oldBall 已出的球,要从集合中去掉* @return*/private static String outBall(int len,int direct,int time,List<String> oldBall){//循环无数次,直到某个数字和几点钟方向一致,则出球String[] redArr = getAutoArr(len);int oldLen = oldBall.size();List<String> newList = new ArrayList<>();for(int i = 0;i < len; i++){boolean flag = true;//该球还未出for(int j = 0;j < oldLen;j++){if(redArr[i].equals(oldBall.get(j))){flag = false;break;}}if(flag){newList.add(redArr[i]);}}int count = 0;//当5s之后还没有出球,则降低执行速度 即count = 5000int newLen = newList.size();List<Integer> tempList = null;while(true){tempList = getRandomNumList(newLen,1,len+1);boolean flag = false;int xb = 0;//记录出球的下标int tempLen = tempList.size();for(int i = 0;i < tempLen;i++){if(direct == tempList.get(i)){xb = i;flag = true;break;}}if(flag){return newList.get(xb);}if(count>5000){try {Thread.sleep(time);} catch (InterruptedException e) {e.printStackTrace();}}else{count++;}}}//定义生成随机数并且装入集合容器的方法//方法的形参列表分别为:生成随机数的个数、生成随机数的值的范围最小值为start(包含start)、值得范围最大值为end(不包含end)  可取值范围可表示为[start,end)private static List<Integer> getRandomNumList(int nums,int start,int end){//1.创建集合容器对象List<Integer> list = new ArrayList();//2.创建Random对象Random r = new Random();//循环将得到的随机数进行判断,如果随机数不存在于集合中,则将随机数放入集合中,如果存在,则将随机数丢弃不做操作,进行下一次循环,直到集合长度等于numswhile(list.size() != nums){int num = r.nextInt(end-start) + start;if(!list.contains(num)){list.add(num);}}return list;}/*** 生成字符串数组* @param len* @return*/private static String[] getAutoArr(int len){String[] strArr = new String[len];for(int i = 0;i < len; i++){if(i < 9){strArr[i] = "0" + (i+1);}else {strArr[i] = "" + (i+1);}}return strArr;}/*** 高频数* @param allData* @param outNum 输出多少位高频数字* @return*/private static List<String> handlerLotNum(List<String> allData,int outNum){Map<String,Integer> mathMap = new LinkedHashMap<>();for(String temp:allData){Integer count = mathMap.get(temp);mathMap.put(temp, (count == null) ? 1 : count + 1);}ArrayList<Map.Entry<String,Integer>> entries= sortMap(mathMap);int size = entries.size();int n = 0;List<String> lotNum = new ArrayList<>();//执行次数中出现最多的一组数据for( int i=0;i<size;i++){//System. out.println(entries.get(i).getKey()+":" +entries.get(i).getValue());if(n <outNum){lotNum.add(entries.get(i).getKey());n++;}}return lotNum;}private static ArrayList<Map.Entry<String,Integer>> sortMap(Map map){List<Map.Entry<String, Integer>> entries = new ArrayList<Map.Entry<String, Integer>>(map.entrySet());Collections.sort(entries, new Comparator<Map.Entry<String, Integer>>() {public int compare(Map.Entry<String, Integer> obj1 , Map.Entry<String, Integer> obj2) {return obj2.getValue() - obj1.getValue();}});return (ArrayList<Map.Entry<String, Integer>>) entries;}
}

纯手工采用java编写双色球、大乐透随机生成算法,真实模拟出球相关推荐

  1. java基础项目-抽奖机-模拟双色球-大乐透

    java基础项目-抽奖机-模拟双色球-大乐透: 创建了很多的方法逐个编译的,做的很新手 不足之处希望多多交流.谢谢. 需求分析: 欢迎界面 欢迎使用超级幸运抽奖机 选彩种(1.双色球:2.超级大乐透) ...

  2. Java实现彩票大乐透、双色球机选号

    手写大乐透.双色球机选代码,梦想还是要有的,万一中了一千万呢,哈哈哈. 效果如下: 代码: import java.util.*; import java.util.stream.Collectors ...

  3. 双色球大乐透(python)用列表和集合分别编程生成一期的开奖预测号码

    用列表和集合分别编程生成一期的开奖预测号码 ''' 双色球 双色球投注区分为红色球号码区和蓝色球号码区 红色球号码区由1-33共三十三个号码组成 蓝色球号码区由1-16共十六个号码组成 投注时选择6个 ...

  4. 十行代码写个彩票随机生成器(双色球+大乐透)

    前言 自己动手丰衣足食,平时买彩票总是不中,回想起来是不是他那个机器机选的就是不中的号??? 那就自己code一个试试吧! 偷偷告诉你,我写完 就去买了,结果真就中了! CSDN下载链接:免费的免费的 ...

  5. Python实现彩票双色球、大乐透随机预测出号

    彩票要是能通过预测都能拿奖,那也是需要攒多少人品才行呀 老老实实做好事,多积德行善,做公益 近期出差的时候,闲来没事,下班路过彩站每天都顺便买一张彩票. 同时,就引发了对所学专业的应激反应,想了一下能 ...

  6. php大乐透,JavaScript实现大乐透号码生成的实例分析

    这个"大乐透号码生成器"纯前端开发,涉及HTML.JS.CSS.为了简单起见,把所有代码写到了一个html文件中,这样的好处就是可以直接用浏览器打开这个文件,当然实际工作中最好把他 ...

  7. 双色球大乐透中奖级别计算

    import java.util.Arrays;/*** 双色球相关规则** @Author: L.swallow* @Date: 2019/12/13 17:33*/ public class SS ...

  8. 双色球大乐透开奖查询软件

    最近老买lottery,复式兑起来太麻烦了,上网一查还真没有类似软件,于是自己写了一个,这下方便了哈哈,给广大彩民分享一下 第一次居然输了点专业词汇被封了,崩溃啊,功能见截图吧,不能多说了 由于附件最 ...

  9. 大乐透号码生成器python_python随机生成 双色球 大乐透

    如下所示,写入文本文件中,文件类型改成.py,直接运行即可: #!/usr/bin/env python import string, sys, time import random def ssq( ...

最新文章

  1. 2021第12届蓝桥杯省赛 -- 填空题:试题B:直线
  2. CocosCreate粒子系统白边问题
  3. C++中的 typedef Vec<uchar> Vec3b; 是何意?
  4. 手把手教你webpack3(3)入口(多入口)entry
  5. Soul网关发布2.1.X之后,它到底有多方便?
  6. Animation动画
  7. 理解WidowManager
  8. :《我相信》腾讯QQ vs 360决战版
  9. linux谷歌浏览器无法登陆,新版CentOS 7.1上的谷歌浏览器无法启动
  10. 最详细的js获取当前url的方法
  11. python表格绘制斜线表头_Excel技巧—轻松搞定各种表头
  12. Java Swing实现仿微信PC客户端程序 SOCKET 即时通信系统
  13. 多选题如何做结构方程模型分析?
  14. python 客户端同构_同构python算法
  15. 经典Java题目:输入一个数字,输出它的大写汉字(阿拉伯数字转汉字)
  16. w10计算机运行特别卡,win10更新后很卡怎么办_win10更新后电脑特别卡的解决方法...
  17. cairo显示多行文本
  18. 计算机在表格顶端添加标题,电脑Excel表格在打印时怎么设置每页有相同的顶端标题和底端标题...
  19. 一文弄懂:训练集、测试集、验证集
  20. (二)浅谈OpenStack T版服务组件--Keyston身份服务(#^.^#)

热门文章

  1. 基于树莓派GPIO口和光电传感器的障碍物检测
  2. Luogu P2327 [SCOI2005]扫雷
  3. python在程序中模拟键盘鼠标操作
  4. 解决canvas画布图片跨域问题
  5. PNP型三极管与NPN型三极管区别
  6. 《ThinkPHP 5实战》4个实战开发案例可从代码仓库下载
  7. 机电工程毕业论文题目【484个】
  8. 爬虫一 requests库与BeautifulSoup库、HTML
  9. 纯真ip数据库 转mysql_如何把纯真ip数据库导入到MySQL数据表中
  10. 各品牌网络监控摄像头RTSP地址查询