论坛首页 Java企业应用论坛

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

浏览 13281 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (1) :: 隐藏帖 (0)
作者 正文
   发表时间:2009-04-23   最后修改:2009-07-17
OO
个人是觉得买双色球也算是一生财之道 但可行性不强,每次选号是个烦心事,机选,组选,胆拖都试过,但中奖情况小,大奖更无,无他法,希望自然概率数可能创造奇迹,所以有此小程序, 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
   发表时间:2009-04-23  
思路很好,代码有点冗余。
0 请登录后投票
   发表时间:2009-04-23  
yuantong 写道
思路很好,代码有点冗余。


确实,主要是 红号不能相同判断调整的 Getdistinct(int num)  循环写的不好,有简单的循环判断吗,当然考虑重用性,最好在num 不确定的情况也可以用
0 请登录后投票
   发表时间: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));
        }
    }
  • eg.rar (9.5 MB)
  • 下载次数: 132
1 请登录后投票
   发表时间: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取
....
0 请登录后投票
   发表时间: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;
		}
	}
}

 

0 请登录后投票
   发表时间:2009-04-26   最后修改:2009-04-26
java.util.ArrayList 的利用确实简单多。

思路问题,思路问题,呵呵
0 请登录后投票
   发表时间:2009-08-14  
我以前也写过一个。 带gui界面的。
0 请登录后投票
   发表时间:2009-08-14  
双色球有冷号,有热号,用这个恐怕。。。
0 请登录后投票
   发表时间:2009-08-15  
这个巧了今天早上刚写了个双色球程序...把以前所有的号码都放进来算概率.等星期一去单位给你发代码哈...呵呵
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics