锁定老帖子 主题:自己写的一个双色球机选小程序,抛砖引玉
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-04-23
最后修改:2009-07-17
希望大家有更好的想法分享 另,刚看到另一帖子(JAVA 每日一题)中提到抽取幸运数的方法,此程序调整下参数也可实现。 下面是代码,已经能满足基本要求,自学内容,或许有更好的改进,感谢指正: 改1:由三楼先做简单修改(DecimalFormat df = new DecimalFormat("00");//数字格式化不足两位前面加0 ),另也作出了ui的,等完善了分享 改2:关于getdistinct的问题,采用下面回复中一位朋友(jenlp520)的方法,当然是用集合类会更方便些09.07.14 import java.io.BufferedReader; import java.io.InputStreamReader; import java.text.DecimalFormat; public class DoubleColourball { public static void main(String[] args) { int num=0; /** * 找了个简单的临时退出点 */ while(num!=11) { work wk=new work(); System.out.println("请输入机选注数:"); num=wk.Readernum(); System.out.println("您要的结果为:"+"\n"); wk.DoSelect(num); } } } class work { DecimalFormat df = new DecimalFormat("00");//数字格式化不足两位前面加0 /** * 读取键盘输入并返回 * Readernum() */ int Readernum(){ try { String s=new BufferedReader( new InputStreamReader(System.in)).readLine(); int num = Integer.parseInt(s); return num; } catch (Exception e) {} return 0; } /** * 选 num 组号并打印 * DoSelect(int num) */ int DoSelect(int num){ if(num>0){ for(int i=0;i<num;i++){ System.out.print("第"+df.format(i+1)+"组号码 红号:"); Getdistinct(6); } } return (0); } /** * 随机数;(1-n)间的随机整数 * Rannum(int n) */ int Rannum(int n){ int innum=0; innum=(int) (Math.random() * n) + 1; return(innum); } /** * 红号取1-33 中的 6个,并且不能相同。 * Getdistinct(int num) */ void Getdistinct(int num){ /*int [] innum={0,0,0,0,0,0}; for(int i=0;i<num;i++) { innum[i]=Rannum(33); } while(innum[1]==innum[0]) innum[1]=Rannum(33); while(innum[2]==innum[0]||innum[2]==innum[1]) innum[2]=Rannum(33); while(innum[3]==innum[0]||innum[3]==innum[1]||innum[3]==innum[2]) innum[3]=Rannum(33); while(innum[4]==innum[0]||innum[4]==innum[1]||innum[4]==innum[2] ||innum[4]==innum[3]) innum[4]=Rannum(33); while(innum[5]==innum[0]||innum[5]==innum[1]||innum[5]==innum[2] ||innum[5]==innum[3]||innum[5]==innum[4]) innum[5]=Rannum(33);*/ int[] red = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,20, 21,22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33}; int[] innum = new int[num]; int j = 32; for (int i= 0; i< num;i++) { int k = Rannum(j--); innum[i] = red[k]; red[k] = red[j]; } for(int i=0;i<num;i++){ System.out.print(df.format(innum[i])+" "); } System.out.println(" 蓝号:"+df.format(Rannum(16))); } } 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-04-23
思路很好,代码有点冗余。
|
|
返回顶楼 | |
发表时间:2009-04-23
yuantong 写道 思路很好,代码有点冗余。
确实,主要是 红号不能相同判断调整的 Getdistinct(int num) 循环写的不好,有简单的循环判断吗,当然考虑重用性,最好在num 不确定的情况也可以用 |
|
返回顶楼 | |
发表时间:2009-04-23
算法是从网上抄来的。忘记了。再发个ui版的。。
import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; public class Test2 { private static List nums = new ArrayList();//实例化一个list public Test2() { for (int i = 0; i < 33; i++) { DecimalFormat df = new DecimalFormat("00");//数字格式化不足两位前面加0 nums.add(df.format(i + 1) + ""); } } private static int getIndex(int max)//在nums的序列最大数到1之间产生随机数 { return (int) Math.round(Math.random() * max); } private static int getLast(int max)//在nums的序列最大数到1之间产生随机数 { return (int) Math.round(Math.random() * max+1); } public static List getResult(int size) //要产生多少位随机数 { List result = new ArrayList(); int min = 33 - size; //定义循环底数多少 for (int i = 32; i >= min; i--)//循环size+1次 { Object t = nums.get(getIndex(i));//取出随机数在nums中对应的数字,复制到t中 result.add(t); //把t放到result中 nums.remove(t); //把nums中的t清除 nums.add(t); //把t在重新添加到nums,t现在在nums中的序列是33, //下次取随机序列从1-32中取,不包括33 } return result; } /** * @param args the command line arguments */ public static void main(String args[]) { Test2 t=new Test2(); System.out.println(t.getResult(6)+""+t.getLast(15)); } } |
|
返回顶楼 | |
发表时间:2009-04-25
# /** # * 红号取1-33 中的 6个,并且不能相同。 # * Getdistinct(int num) # */ 你这段太麻烦了吧 33个中取6个数各不相同的话应该这样: step1:33个数弄进长度为33的数组int[33] step2:从0-32中取一个随机数n 这个数是第一个数int[n] step3:然后把int[n]和int[32]对换位置,这个时候数组下标为0-31的数就是剩下的数,int[32]就第一个选定的数 step4:重复第2步 不过是从0-31取 .... |
|
返回顶楼 | |
发表时间:2009-04-25
最后修改:2009-04-25
用Java 5的语法改进了一下,增加双色球和七乐彩,符合淘宝那个上传投注的文件格式。有空随机弄几注买买看,哈哈
import java.text.DecimalFormat; import java.util.ArrayList; import java.util.List; public class Test2 { private static int getIndex(int max) {// 在nums的序列最大数到1之间产生随机数 return (int) Math.round(Math.random() * max); } private static int getLast(int max) {// 在nums的序列最大数到1之间产生随机数 return (int) Math.round(Math.random() * max + 1); } public static String getResult(int size, int max) { // 要产生多少位随机数 List<String> nums = new ArrayList<String>();// 实例化一个list for (int i = 0; i < 33; i++) { DecimalFormat df = new DecimalFormat("00");// 数字格式化不足两位前面加0 nums.add(df.format(i + 1) + ""); } List<String> result = new ArrayList<String>(); int min = max - size; // 定义循环底数多少 for (int i = max - 1; i >= min; i--){ // 循环size+1次 String t = nums.get(getIndex(i));// 取出随机数在nums中对应的数字,复制到t中 result.add(t); // 把t放到result中 nums.remove(t); // 把nums中的t清除 nums.add(t); // 把t在重新添加到nums,t现在在nums中的序列是 max, // 下次取随机序列从1 - max-1中取,不包括 max } StringBuffer text = new StringBuffer(); for(String t: result){ text.append(t); text.append(" "); } return text.substring(0, text.length() - 1); } public static void main(String args[]) { int t = args.length > 0?Integer.parseInt(args[0]):2; switch(t){ case 2: // 双色球 System.out.println(getResult(6, 33) + ":" + getLast(15)); break; case 7: // 七乐彩 System.out.println(getResult(7, 30)); break; } } }
|
|
返回顶楼 | |
发表时间:2009-04-26
最后修改:2009-04-26
java.util.ArrayList 的利用确实简单多。
思路问题,思路问题,呵呵 |
|
返回顶楼 | |
发表时间:2009-08-14
我以前也写过一个。 带gui界面的。
|
|
返回顶楼 | |
发表时间:2009-08-14
双色球有冷号,有热号,用这个恐怕。。。
|
|
返回顶楼 | |
发表时间:2009-08-15
这个巧了今天早上刚写了个双色球程序...把以前所有的号码都放进来算概率.等星期一去单位给你发代码哈...呵呵
|
|
返回顶楼 | |