class RandomNum
{
int a,b,c;
RandomNum()
{

for(int i=0;i<54;i++)
{
b=(int)(Math.random()*1000 % 54 + 1);
System.out.print(b+",");
}
}
public static void main(String args[])
{
new RandomNum();
}
}这样还是有可能有重复的,不行你就把每次生成的随机数记录到一个数组中,下一次生成随机数后先到数组中查一下,如果已经存在就舍弃重新生成一个。

解决方案 »

  1.   

    to:HitXU(一天不学习,赶不上刘少奇) ( ) 信誉:100 
        我试了不行!你说的用数组保存生成的值,然后判断,我怎么判断呀,可以给出代码吗?谢谢!
    随机数是生成0到1之间的数,可以生成0,但是不会是1,故当随机数为0时,则+1防止生成0,懂否!
      

  2.   

    class RandomNum
    {
    int a,b,c;
    int m[]=new int[54];
    RandomNum()
    {

    for(int i=0;i<54;i++)
    {
    b=(int)(Math.random()*54+1);
    for(int a=0;a<i;a++)
    {
    if(m[a]!=b)
    m[i]=b;
    }
    System.out.print(m[i]+",");
    }
    }
    public static void main(String args[])
    {
    new RandomNum();
    }
    }
    我又写了个,但是打印出来的结果还是有重复的呀!来个高手给个提示呀,那里有错呀!
      

  3.   

    import java.util.*;
    import java.util.Random;
    public class RandomT
    {
    public static void main(String [] args)
    {
    Random rand=new Random();
    ArrayList<Integer>t=new ArrayList<Integer>();
    int [] a=new int[54];
    for(int i=0;i<54;i++)
    {
    t.add(i+1);
    }
    for(int i=54;i>0;i--)
    {
    int n=rand.nextInt(i);
    a[54-i]=t.remove(n);
    }
    for(int i=0;i<54;i++)
    System.out.print(a[i]+"  ");
    }
    }
      

  4.   

    to: faen(发恩) ( ) 信誉:100 
    我运行了下是没有重复的。
    ArrayList<Integer>t=new ArrayList<Integer>();这行代码不懂什么意义呀,可以给解释下吗
      

  5.   

    for(int i=0;i<54;i++)
    {
    t.add(i+1);
    }
    for(int i=54;i>0;i--)
    {
    int n=rand.nextInt(i);
    a[54-i]=t.remove(n);
    }
    这2个循环也没看懂,我没用过ArrayList
      

  6.   

    关键不是在这儿的。
    这个只不过是一个动态的数组,他完全可以一般的数组来实现,只不过我偷懒了一点,可以少些代码。
    和c++的vector是一样的。
    如果你还不明白的花,看一下java的关于collection的文章
      

  7.   

    我懂你说的意思了,t.add(i+1);是说往t这个容器里面添加对象,但是第二个循环我没看懂,唉,看来我是笨的可以了!
      

  8.   

    既然你就倒这54个数,那不如这样:
    for(int i=0;i<54;i++){
     a[i]=i;}
    for(int i=0;i<100;i++){
     int b=(int)(Math.random()*54+1);
     int c=(int)(Math.random()*54+1);
     exchange a[b],a[c];
    一定没有重复的。
    就当作是洗牌了。
      

  9.   

    exchange这个是关键字吗
    我查了api没查到有这个关键字的!
      

  10.   

    public Vector getRadom(int size){
    Vector result = new Vector() ; 
    while(result.size()<size){
    int b=((int)(Math.random()*100))%size+1;
    result.add(String.valueOf(b));
    }
    return result;
    }
      

  11.   

    topil(认认真真学习,塌塌实实工作) ( ) 信誉:98 
    你的办法是说往那个Vector集合对象里添加生成的随机数当Vector集合对象的大小小于给定的数则继续添加,但是我感觉还是有重复的
      

  12.   

    topil(认认真真学习,塌塌实实工作) ( ) 信誉:98 
    你的那个方法不行呀,我刚才试了,有重复的
    public Vector getRadom(int size){
    Vector result = new Vector() ; 
    while(result.size()<size){
    int b=((int)(Math.random()*100))%size+1;
    result.add(String.valueOf(b));
    System.out.print(b+",");
    }
    return result;
    }
    在你给你给的方法里面添加了个测试代码,输出结果:
    31,34,6,26,15,20,11,23,34,21,3,3,24,6,38,10,33,31,21,23,23,24,1,23,22,16,9,39,18
    ,42,31,54,20,51,50,30,20,26,31,8,39,38,24,30,43,28,54,28,13,32,41,30,26,22,Press
      

  13.   

    Random r = new Random();
    Vector v = new Vector();
    Vector vNew = new Vector();
    int count = 54;
    for (int i = 0; i < count; i++) {
    v.add("" + i);
    }
    int i;
    while (!v.isEmpty()) {
    i = Math.abs(r.nextInt()%count);
    vNew.add(v.get(i));
    v.remove(i);
    count--;
    }
    //Vector vNew就是你想要的~~~
    for (int j = 0; j < vNew.size(); j++) {
    System.out.print(vNew.get(j) + "-");
    }
    //显示效果
      

  14.   

    public HashMap getRadom(int size){
    HashMap result = new HashMap() ; 

    while(result.size()<size){
    int b=((int)(Math.random()*100))%size+1;
    result.put(String.valueOf(b),"");

    }
    return result;
    }main函数这样写
    HashMap h = a.getRadom(54);

    System.out.println(h.keySet());
      

  15.   

    DreamDragon_NEU(梦龙) ( ) 信誉:100 
    vNew.add(v.get(i));
    v.remove(i);
    为什么那个while循环里面先添加i然后又删除i呀
    就是这里看不懂
    可以给解释下吗?谢谢了
      

  16.   

    ArrayList<Integer>t=new ArrayList<Integer>();要jdk1.5才支持吧
      

  17.   

    把里面的i导出,放入vNew里,然后在把v里的删除~~~
    就相当于,从一副牌里一张一张地随机的向外抽取,形成了一副已经乱序的新牌~~~
      

  18.   

    DreamDragon_NEU(梦龙) ( ) 信誉:100 
    谢谢,现在已经明白了。 thrive_li() ( ) 信誉:100 
    是的,看别人发贴里面说1.5以后的版本才支持<>"范型"
      

  19.   

    可以用HashSet,HashSet是没有重复数的
      

  20.   

    呵呵,怎么又是这个发牌的问题,你可以使用
    java.util.Collections.shuffle(arraylist);
      

  21.   

    class RandomNum
    {
    int b;
    int m[]=new int[54];
    RandomNum()
    {
    m[0]=(int)(Math.random()*54+1);
    System.out.print(m[0]+",");
    int i=1;
    boolean nofinded=true;
    while(i<54)
    {
         b=(int)(Math.random()*54+1);      for(int j=0;j<i;j++)
         {
    if(m[j]==b)
    {
        nofinded=false;
        break;
    }
    else
    nofinded=true;
        }
        if(nofinded)
        {
         m[i]=b;
    System.out.print(m[i]+",");
    i++;
        }
    }
    }
    public static void main(String args[])
    {
    new RandomNum();
    }
    }
    这个简单了吧!!!