`
hyhandylit
  • 浏览: 67180 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

2种取不重复随机数

    博客分类:
  • J2SE
 
阅读更多
public void test(){
List<Integer> list = new ArrayList<Integer>();  
       
        for(int i = 1; i <= 6; i++){  
            list.add(i);  
        }  
 
        Collections.shuffle(list);  
          
        for(Integer i : list){  
            System.out.println(i);  
        }  
}

public void test_2(){
int a[] = new int[6];  
    for (int i = 0; i < a.length; i++) {  
      a[i] = (int) (Math.random() * 6) + 1;  
      for (int k = 0; k < i; k++) {  
        if (a[i] == a[k]) {  
          i--;  
          continue;  
        }  
      }  
    }  
    System.out.println(Arrays.toString(a));  

}
分享到:
评论
11 楼 berlou 2009-12-04  
轮子轮子轮子..........
简单以及不追求特别严谨的需求可以用Set存取.
10 楼 mwei 2009-12-03  
<div class="quote_title">mylazygirl 写道</div>
<div class="quote_div">
<p>以前我自己弄的时候是建了个数组标记,初始n[i] = i; 用过之后赋值-1,每次检查,看了第一个方法真是内牛满面。</p>
</div>
<p>同感,前两天还用这个方法。在1,2,3...n个数中生成m个不重复的随机数,m&lt;=n。</p>
<p>loop</p>
<p>     生成的随机数作为数组的索引,这个数组元素与最后一个交换,数组长度--</p>
<p>end loop;</p>
9 楼 iaimstar 2009-11-30  
wubo19842008 写道
我记得好象是在哪看到,说通过计算机是不能产生出真正意义上的随机数的,说要通过什么原子碰撞什么技术才能得到真正的随机数。

系统时钟泪流满面
8 楼 mylazygirl 2009-11-30  
<p>以前我自己弄的时候是建了个数组标记,初始n[i] = i; 用过之后赋值-1,每次检查,看了第一个方法真是内牛满面。</p>
7 楼 mwei 2009-11-28  
方法2有点像插入排序。
谢谢分享。
6 楼 Ulysses 2009-11-28  
不错。看起来第一种更好点。
5 楼 wolf521hf 2009-11-27  
知识在于积累……
学习了 楼主
4 楼 syre 2009-11-27  
方法1 O(n) 方法2 O(n^2)

而且方法一代码更简洁。
3 楼 wubo19842008 2009-11-27  
我记得好象是在哪看到,说通过计算机是不能产生出真正意义上的随机数的,说要通过什么原子碰撞什么技术才能得到真正的随机数。
2 楼 ziyu_1 2009-11-27  
把生成的随机数都存在map中,随机数既做key,也做value.

每次生成随机数后都检查map中是否有这个key的随机数.
1 楼 ziyu_1 2009-11-27  
用MAP也行啊

相关推荐

Global site tag (gtag.js) - Google Analytics