遇到一个问题,在一定范围怎么产生不重复的随机数呢?
怎么用random 各位高手指教thx

解决方案 »

  1.   

    List<Integer> list = new ArrayList<Integer>();
    for (int i=start; i<=end; i++) { //把范围的数据保存到一个list中
        list.add(i);
    }
    List<Integer> result = new ArrayList<Integer>();
    for (int i=0; i<num_you_want; i++) { //从list中随机移走数据,保存到结果list中,移走的数据是不会再存在于list了,所以保证数据不重复
        result.add(list.remove((int)(Math.random()*list.size())));
    }
    System.out.println(result);
      

  2.   

    稍稍修改一下
    List<Integer> list = new LinkedList<Integer>(); // 因为后续需要不停remove,LinkedList会更快点
      

  3.   

    也可以用Set类来存储数据,Set是不会重复的import java.util.*;public class Test
    {
    public static void main(String[] args)
    {
    HashSet<Integer> set = new HashSet<Integer>();
    for (int i = 0; i < 10; i++)
    {
    int t = (int) (Math.random() * 100);
    set.add(t);
    }

    Iterator iterator = set.iterator();
    while (iterator.hasNext())
    {
    System.out.println(iterator.next());
    }
    }
    }
      

  4.   

    楼主需要的是随机整数吗?
    可以先把该范围内的所有数字(如果不大的话)存在一个list里面,将该list进行洗牌,
    然后每次从list里面取出一个数字即可
            List<Integer> nums = new ArrayList<Integer>();
            for(int i=0; i<10; i++) nums.add(i);
            Collections.shuffle(nums);
            
            for(int i=0; i<10; i++) {
                Integer randNum = nums.get(i);
                System.out.println(randNum);
            }
      

  5.   

    可以加上随机种子,时间的毫秒数,再用set去重,还可以用上多线程
      

  6.   

    和七楼想法一样。。set用处哆哆。。
      

  7.   

    在java中使用Set 的确是最简单的
      

  8.   

    用Set类来存储数据,Set是不会重复的。推荐7楼的答案。