怎么样才能生成1到100之间不重复的随机数呢?我写的程序生成的随机数里有重复的.有没有大虾来指点一下啊!

解决方案 »

  1.   

    随机数都是重复的啦,否则怎么叫随机数啊!如果你想生成1~100的一个随机系列,可以这样:
    int max = 100;
    List buf = new ArrayList(max);
    for (int i = 0; i < max; i++)
    buf.add(new Integer(i + 1));
    Collections.shuffle(buf);
    System.out.println(buf);
      

  2.   

    如果用Random来写的话呢?自己顶一下.
      

  3.   

    直接放到Set里,就不会重复.
      

  4.   

    按LZ 的意思 来说  其实 LZ 想要的不是随即数 而是想  例如 如果有一个 a[100]的数组 把1 到100的数字 随即 并且不重复的放到 数组中     遍历 整个数组的时候 没有重复的数字  
    然而随即数  肯定会出现重复的数字的  所以 ...
      

  5.   

    Random编就放在set里呗,没到100个,继续加.
      

  6.   

    ChDw(米)    的方法不是很好吗?难道你非得要用Random生成随机数, 放到Set里... 当然这样也可以...
      

  7.   

    Set<Integer> buf = new HashSet<Integer>(100);
    Random generator = new Random(); while (buf.size() < 100) {
    buf.add(generator.nextInt(100) + 1);
    }感觉效率不是很高
      

  8.   

    我写的这个应该是你想要的结果的,不过效率也不是很高,用到了递归的,不过却是你想要的结果的,写了个10以内的,100的你自己改变数组就可以了,调试过,一切正常import java.util.*;
    import java.lang.*;public class ExMath
    {
    Vector v1;
    Vector v2;
    String b,c;

    public ExMath()
    {
    v1=new Vector(1,1);
    v2=new Vector(1,1);

    String[] tt={"1","2","3","4","5","6","7","8","9","10"};

    for (int i=0;i<tt.length;i++)
    {
    v1.add(tt[i]);
    }

    dd();
    System.out.println(v2);
    }

    public void dd()
    {
    int a;

    for (int i=0;i<=10;i++)
    {
    a=(int)(Math.random()*11);
    b=String.valueOf(a);//b为一个10以内的随机数

    //让b去与数组比较,是否相等,也就是看b是否是现有数组里的数
    //如果相等则先添加到新数组中,然后在从老数组中把数删除
    for (int j=0;j<v1.size();j++)
    {
    c=(String)v1.get(j);

    if (b.equals(c))
    {
    v2.add(c);
    v1.remove(c);

    dd();//回调本方法在新生成一个b继续比较
    }
    }
    }
    }

    public static void main(String[] arg)
    {
    new ExMath();
    }
    }
      

  9.   

    生成随即数然后丢到Set里面,while一下Set.size()!知道生成的随机数数目满足要求就可以了
      

  10.   

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.List;class TestInner {
    public static void Main(String[] args) {
    int max = 100;
    List buf = new ArrayList(max);
    for (int i = 0; i < max; i++)
    buf.add(new Integer(i + 1));
    Collections.shuffle(buf);
    System.out.println(buf);
    }
    }
      

  11.   

    int[] a = new int[100];
    for(int i = 0 ; i < 100 ; i++){ a[i] = i;}
    int n = a.length;
    for(int i = 99 ; i >= 0 ; i--)
    {
         int temp = (int)(Math.random()*n--);
         System.out.println(a[temp]);
         a[temp] = a[i]; //把该次随机到的数的位置放最后一个数
    }
      

  12.   

    gongyali2005() ( ) 信誉:100    Blog  2006-11-20 10:40:44  得分: 0  
        
    如果用Random来写的话呢?自己顶一下.
    =========================
    扑克牌的洗牌方法!
    int a[100]={1,2,...,100};
    Random产生一个随机数iRandom[0-99的范围],置换a[iRandom]和a[99-iRandom];//重复此操作N次,a[100]即所求