首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

想写个java程序实现双色球随机选号,目前碰到一个有关问题,如何将0这个随机数去掉

2012-03-24 
想写个java程序实现双色球随机选号,目前碰到一个问题,怎么将0这个随机数去掉?各位,小弟刚刚自学java,现在

想写个java程序实现双色球随机选号,目前碰到一个问题,怎么将0这个随机数去掉?
各位,小弟刚刚自学java,现在尝试用java实现双色球随机选号功能,但是碰到一些问题,请各位看看我的程序,应该怎么改?
谢谢了

Java code
package josephus.game;import java.util.*;import java.io.*;public class Radom {    public static void main(String[] args)throws Exception{        Set<Integer> ns = new TreeSet<Integer>();//先new一个set集合,保存随机生成的Integer对象        Random a=new Random();//用random方法实现随机选号        OutputStream os=new FileOutputStream("ball.dat",true);//要将每次生成的随机号码放入数据文件        ObjectOutputStream out=new ObjectOutputStream(os);//new一个对象流        System.out.print("红球"+" ");               //实现随机选6个红球        while(true){            ns.add(a.nextInt(34));            if(ns.size()==6) break;//问题在这里:怎么实现 “先随机生成6个数,然后依次判断每个元素是否为0,若所有元素值不为0,跳出while循环”这个方法?        }            System.out.print(ns+" ");//将红球打印出来                //实现随机选1个蓝球        Random b=new Random();        System.out.print("蓝球"+" ");        while(true){                       if(b.nextInt(17)!==0) break;            }        System.out.println(b.nextInt(17));        out.writeObject(ns);        out.close();            }}

我知道用遍历看有没有0
比如:
Java code
for(Integer element:ns){            System.out.println(element);                System.out.println(element==0);            //if(element==0)break;            }

现在我想问的是 在红球的while语句中,怎么实现 “先随机生成6个数,然后依次判断每个元素是否为0,若所有元素值不为0,跳出while循环”这个方法?也就是if(ns.size()==6&&“遍历每个元素,如果都不为0”) break;怎么实现?!跪求!

[解决办法]
先用一个变量保持产生的随机数,判断不是0才加到ns里,到时候就不用再遍历了
[解决办法]
是0就重新来。
[解决办法]
ns.add(a.nextInt(33) + 1);
[解决办法]
探讨
先用一个变量保持产生的随机数,判断不是0才加到ns里,到时候就不用再遍历了

[解决办法]
5楼的不错
这样就不用判断为零了
[解决办法]
探讨
ns.add(a.nextInt(33) +1);

[解决办法]
将生成的6个数先保存在数组里,进行遍历,如果遇到0,则将该数重新用nextInt(34)获得,直到这六个数全不为0为止。
虽然不如ns.add(a.nextInt(33) +1)这个方法巧妙,但也符合楼主的要求!
[解决办法]
Java code
while(true){            ns.add(a.nextInt(34));            if(ns.size()>=6&&!ns.contains(Integer(0)) ) break;        }
[解决办法]
while(true){
if(b.nextInt(17)!==0) break;
}
System.out.println(b.nextInt(17));

楼主这个地方抽了两次蓝球阿
而且红色的部分写法不对哦
[解决办法]
自己写了一个抽奖方法,仅供参考
Java code
import java.util.Hashtable;import java.util.Random;import java.util.TreeSet;public class TestRandom1 {    /**     * @param args     */    public static void main(String[] args) {        // TODO Auto-generated method stub        Hashtable result = getRandom(6,1,34,17);        System.out.println("no1 is:"+result.get("no1").toString());        System.out.println("no2 is:"+result.get("no2").toString());    }        //参数part1->要抽出第一部分的个数,也就是抽的6个红球         //参数part1->要抽出第二部分的个数,也就是抽的1个蓝球         //参数arrange1->红球的抽取范围         //参数arrange2->蓝球的抽取范围    static Hashtable getRandom(int part1,int part2,int arrange1,int arrange2){        Hashtable<String ,TreeSet> result = new Hashtable<String,TreeSet>();                Random r = new Random();                        TreeSet<Integer> no1 = new TreeSet<Integer>();         while(no1.size()<part1){            int temp = r.nextInt(arrange1);            if(temp!=0){                no1.add(temp);            }                    }                TreeSet<Integer> no2 = new TreeSet<Integer>();         while(no2.size()<part2){            int temp = r.nextInt(arrange2);            if(temp!=0){                no2.add(temp);            }            }                result.put("no1", no1);        result.put("no2", no2);                return result;    }} 


[解决办法]
楼主要是想输出到文件的话,这样写
最好别用ObjectOutputStream,它主要用来序列化,保存对象的

Java code
    public static void main(String[] args) {        // TODO Auto-generated method stub        Hashtable result = getRandom(6,1,34,17);                try {            PrintWriter pw = new PrintWriter("c:/test/testRandom.txt");            pw.println(result.get("no1").toString());            pw.print(result.get("no2").toString());            pw.flush();            pw.close();        } catch (FileNotFoundException e) {            // TODO Auto-generated catch block            e.printStackTrace();        }    }
[解决办法]
Java code
 while(true){            ns.add(a.nextInt(34));                        if(ns.size()==6&&pd.isTraversing(ns)){                break;            }else{                ns.remove(new Integer(0));            }        }
[解决办法]
如果是给定一个数组,然后生成所有组合呢?
[解决办法]
在原来随机数的基础上加1,看《郭克华j2me实战教学视频教材》学到的,呵呵~
[解决办法]
把红球的号码放一Set中,用
int code=rand.nextInt(set.size());
set.remove(code);

上面的语句循环6次。

选蓝球也一样的道理。
[解决办法]
while(true){
int i = a.nextInt(34));
if(!= 0)
ns.add(i);
if(ns.size()==6) break;//问题在这里:怎么实现 “先随机生成6个数,然后依次判断每个元素是否为0,若所有元素值不为0,跳出while循环”这个方法?
}


虽然有点笨, 应该好用,也不太啰唆

当然 +1 的办法 比较好
[解决办法]
Java code
while(true){            ns.add(a.nextInt(34));            if(ns.size()==6&&pd.isTraversing(ns)) break;        }
[解决办法]
探讨
Java codepackage josephus.game;import java.util.*;import java.io.*;publicclass Radom {publicstaticvoid main(String[] args)throws Exception{
Set<Integer> ns=new TreeSet<Integer>();
Traversing pd=new Traversing();
Random a=new Random();
OutputStream os=new FileOutputStream("ball.dat",true);
ObjectOutputStream out=new ObjectOutputStream(os);
System.out.print("红球"+"");while(true){
ns.add(a.nextInt(34));if(ns.size()==6&&pd.isTraversing(ns))break;
}
System.out.print(ns+"");
System.out.print("蓝球 [");
System.out.println(a.nextInt(16)+1+"]");
out.writeObject(ns);
out.close();
}
}
程序已经修改成这个样子,运行后可以得到不包含0的结果。但是,发现每运行几次之后就有点小问题。有时会只打印“红球”两字程序就不动了,为什么?
看图:[img= <a href="http://www.flickr.com/photos/34109822@N06/3862867951/" title="Flickr 上 七月逆流 的 Screenshot"> <img src="http://farm3.static.flickr.com/2544/3862867951_f7f456ee5f_o.png" width="821" height="623" alt="Screenshot" /> </a>][/img]


[解决办法]
这个方法最简单
探讨
ns.add(a.nextInt(33) +1);

[解决办法]
狂鼎这位仁兄,精辟
探讨
这个方法最简单
引用:
ns.add(a.nextInt(33) +1);


[解决办法]
楼主算法有问题…既然是选号,当然就不能重复的吧,但是楼主没有考虑进去……
[解决办法]

探讨
楼主算法有问题…既然是选号,当然就不能重复的吧,但是楼主没有考虑进去……

[解决办法]
Java code
ns.add(a.nextInt(33) +1); 

热点排行