[伪科学]如何使用程序探究彩票的奥秘

身边一直有玩彩票的朋友,曾经有一天,朋友说让我开发一个帮助他买彩票的软件,当时连面向对象都没有搞清楚的我,

硬是弄了一个给他,C#写的,完全用数组实现的,差不多包含了机选号码,号码分析,浏览器外链一个历史表等功能.

今日又突然想到这个事情,想用现在的技术再一次进行开发,除了用教好的方式再实现之前的功能外,在加入一些本人对数据的感悟(有一定的主观因素),来计算出彩票中奖号码,选定双色球这款比较热门的玩法来实现吧.

至于灵不灵就用时间来证明了,


第一步:机选号码

模拟双色球机选号码

package tool;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.Random;
import java.util.Timer;


public class ChoseNumber {
	/**从给定的集合里随机选择一个数字
	 * @param inputList 包含一串数字的集合
	 * @return 结果数字
	 */
	private static int getNumber(ArrayList inputList)
	{
		Random ran =new Random();
		int i=ran.nextInt(inputList.size());
		return inputList.get(i);
	}
	
	/**从给定的范围里生成一个不包括排除列表里元素的集合
	 * @param start 开始值
	 * @param end 结束值
	 * @param out 排除列表
	 * @return 不包括排除列表里元素的集合
	 */
	private static ArrayList makeArray(int start,int end,ArrayList out)
	{
		ArrayList res=new ArrayList();
		for (int i = start; i <= end; i++) {
			if (!out.contains(i)) {
				res.add(i);
			}
		}
		return res;
	}
	
	/**返回一个在指定范围内的指定个数的整数集合
	 * @param start 开始范围
	 * @param end 结束范围
	 * @param times 包含的整数个数
	 * @return 在 start 和 end 之间取 times 个 不重复的数字 
	 */
	public static ArrayList getListOnTimes(int start,int end,int times)
	{
		ArrayList out=new ArrayList();
		int temp=0;
		for (int i = 0; i < times; i++) {
			temp=getNumber(makeArray(start,end,out));
			out.add(temp);
		}
		Collections.sort(out);
		return out;
	}
	
	public static void main(String[] args) {
		
		ArrayList test=new ArrayList();
		
		test=getListOnTimes(1,33,6);//取6个红球
		test.add(getListOnTimes(1,14,1).get(0));//取1个蓝球后组成一组号码

		System.out.println(test);
	}
}


第二步:机选2000万组号码,作为研究数据,因为数据大,分成一次生成10万条,分200次生成,生成后记录到mysql数据库


建表sql:

DROP TABLE IF EXISTS `coculatenumber_2000w_index_copy`;
CREATE TABLE `coculatenumber_2000w_index_copy` (
  `id` int(11) NOT NULL auto_increment,
  `r1` tinyint(4) NOT NULL,
  `r2` tinyint(4) NOT NULL,
  `r3` tinyint(4) NOT NULL,
  `r4` tinyint(4) NOT NULL,
  `r5` tinyint(4) NOT NULL,
  `r6` tinyint(4) NOT NULL,
  `b1` tinyint(4) NOT NULL,
  `date` datetime default NULL,
  `info` text,
  PRIMARY KEY  (`id`),
  KEY `r1` USING BTREE (`r1`),
  KEY `r2` USING BTREE (`r2`),
  KEY `r3` USING BTREE (`r3`),
  KEY `r4` (`r4`),
  KEY `r5` (`r5`),
  KEY `r6` (`r6`),
  KEY `b1` USING BTREE (`b1`),
  KEY `allred` USING BTREE (`r1`,`r2`,`r3`,`r4`,`r5`,`r6`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

java代码:

package test;

import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;

import tool.ChoseNumber;
import jdbc.DBHelper;

public class Demo {

	public static void doByPart(int nums,int allnums,int start,int end,int all,String code)
	{
		
		long starttime=(new Date()).getTime();
		ArrayList test=new ArrayList();
		int i=start;
		String sql ="";
		String info =code;
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		DBHelper db = new DBHelper();
		sql ="insert into coculatenumber_2000w_index SET r1=?, r2=?,r3=?,r4=?,r5=?,r6=?,b1=?,date=?,info=?";

		try {
			db.conn.setAutoCommit(false);
			db.pst=db.conn.prepareStatement(sql);
		} catch (SQLException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		nums++;
		System.out.println("第"+nums+"部分生成中!共"+(end-start)+"条记录");
		while (i


你可能感兴趣的:([伪科学]如何使用程序探究彩票的奥秘)