`
leelj
  • 浏览: 12650 次
  • 性别: Icon_minigender_1
  • 来自: 太原
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

自己写的一个双色球机选小程序,抛砖引玉

阅读更多
个人是觉得买双色球也算是一生财之道 但可行性不强,每次选号是个烦心事,机选,组选,胆拖都试过,但中奖情况小,大奖更无,无他法,希望自然概率数可能创造奇迹,所以有此小程序, O(∩_∩)O哈哈哈~
希望大家有更好的想法分享

另,刚看到另一帖子(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)));
       
	}
 }




  • 描述: 运行结果
  • 大小: 34.4 KB
分享到:
评论
15 楼 shanfeng1 2009-12-30  
数据不说谎,需要个统计算法
14 楼 wyang2008 2009-12-30  
双色球的开奖号码其实都是工作人员事先已经定好了的,你概率算得再准,也不一定能中。因为开奖前半小时,开奖的工作人员就会去统计哪个号码出现的最多,哪个号码出现的最少,结果统计出来后,他要哪个号码中奖,只需要在摇奖机上设置一下就可以了,那摇奖机据说是从国外进口的,价格不菲,所以算概率是不靠谱的,关键还是要运气。
13 楼 lupin啊兰 2009-12-30  
Getdistinct(int num)方法中的下面这段代码:

for (int i= 0; i< num;i++) {  
            int k = Rannum(j--);  
            innum[i] = red[k];  
            red[k] = red[j];            
 
        }  

red[k] = red[j];     这句是不是应该改成 red[k] = red[j + 1];    
呢?j 在前面已经做了一次自减,要定位到数组的最后一位是不是应该再加1才对啊?               
12 楼 shinezhou 2009-12-29  
只是随机选还是有其它作用?

11 楼 pf_renren 2009-12-29  
import java.util.TreeSet;
public class cp {
	public static void main(String[] args) {
		TreeSet ts= new  TreeSet();
		while(ts.size()<6){
			int i =(int) ((Math.random()*33)+1);
			ts.add(i>9?(""+i):("0"+i));
		}
		System.out.print(ts.toString().substring(1, ts.toString().length()-1));
		int j =(int) ((Math.random()*16)+1);
		System.out.print((j>9?("——"+j):("——0"+j)));
	}
}



实在
10 楼 mislay 2009-08-16  
哈哈。都有这想法,顺便写个验证自己中奖的吧。每次对一个个看号麻烦,而且还怕看错导致小奖都没得领。


如果能连上福彩中心历史数据,概率学加上...期待啊.
9 楼 ansjsun 2009-08-15  
这个巧了今天早上刚写了个双色球程序...把以前所有的号码都放进来算概率.等星期一去单位给你发代码哈...呵呵
8 楼 eclipse2008 2009-08-14  
双色球有冷号,有热号,用这个恐怕。。。
7 楼 java_mike 2009-08-14  
我以前也写过一个。 带gui界面的。
6 楼 leelj 2009-04-26  
java.util.ArrayList 的利用确实简单多。

思路问题,思路问题,呵呵
5 楼 yipsilon 2009-04-25  
<p>用Java 5的语法改进了一下,增加双色球和七乐彩,符合淘宝那个上传投注的文件格式。有空随机弄几注买买看,哈哈</p>
<p> </p>
<pre name="code" class="java">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&lt;String&gt; nums = new ArrayList&lt;String&gt;();// 实例化一个list
for (int i = 0; i &lt; 33; i++) {
DecimalFormat df = new DecimalFormat("00");// 数字格式化不足两位前面加0
nums.add(df.format(i + 1) + "");
}

List&lt;String&gt; result = new ArrayList&lt;String&gt;();
int min = max - size; // 定义循环底数多少

for (int i = max - 1; i &gt;= 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 &gt; 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;
}
}
}</pre>
<p> </p>
4 楼 jenlp520 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取
....
3 楼 wxq594808632 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));
        }
    }
2 楼 leelj 2009-04-23  
yuantong 写道
思路很好,代码有点冗余。


确实,主要是 红号不能相同判断调整的 Getdistinct(int num)  循环写的不好,有简单的循环判断吗,当然考虑重用性,最好在num 不确定的情况也可以用
1 楼 yuantong 2009-04-23  
思路很好,代码有点冗余。

相关推荐

Global site tag (gtag.js) - Google Analytics