硬是弄了一个给他,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;
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