java中怎样让随机数不重复

如题所述

  java中要使生成的随机数不重复可以将已经生成的随机数放入到数组中,每次生成随机数时与数组的内容比较是否相等,相等则重新生成,不相等则存入数组。
  示例代码如下(生成10之内的4个不相等的整数):

public class Demo {
    public static void main(String[] args) {
        int[] a = new int[]{-1,-1,-1,-1};//初始化数组
        Random random = new Random();
        int count = 0;//记录有效的随机数个数
        while(count < a.length){
            boolean flag = true;//用来标志的变量
            int r = random.nextInt(10);
            for(int i=0;i<a.length;i++){
                if(r == a[i]){
                    flag = false;
                    break;
                }
            }
            if(flag){
                a[count] = r;
                System.out.println(r);
                count++;
            }
        }
    }
}

  其中的变量flag用来标志产生的随机数是否已经存在,默认值设置为true,表示不存在,flase表示该随机数已经存在。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-03-09
最简单的办法就是将产生的随机数放入一个set中,然后判断set的size就好。set中是不能存在重复数的。追问

能把代码,让我看看 吗?

追答

以下代码是产生10个不重复int型随机数,并用两种方式遍历
HashSet set=new HashSet();
while(true)
{
set.add(new Random().nextInt());
if(set.size()==10)
{
break;
}
}
Iterator iterator=set.iterator();
while(iterator.hasNext())
{
System.out.println(iterator.next());
}
Integer[] res=(Integer[])set.toArray();
for(int i=0;i<res.length;i++)
{
System.out.println(res[i]);
}

本回答被提问者采纳
第2个回答  2013-08-26
一个不错的算法,很简单,但有效。不过如果范围比较大,则占用内存大,就不推荐使用了。个人感觉1000个以内的就可以考虑。这东西也许你早就知道了,但我依然惊叹算法的力量。看代码
import java.util.*;/**
* 生成不重复随机数的一种算法。***/
public class T {
public static void main(String args) {
// 种子你可以随意生成,但不能重复
int seed = { 1, 2, 3, 4, 5, 6, 7, 8, 9 };
int ranArr = new int;
Random ran = new Random();
// 数量你可以自己定义。
for (int i = 0; i seed.length; i++) {
// 得到一个位置
int j = ran.nextInt(seed.length - i);
// 得到那个位置的数值
ranArr[i] = seed[j];
// 将最后一个未用的数字放到这里
seed[j] = seed[seed.length - 1 - i];}
System.out.println("ranArr:" + Arrays.toString(ranArr));}}
一个运行结果
第3个回答  2015-10-21
/**
* @随机数组
* 生成一个由大于零的随机整数组成的数组,且数组中没有重复的值。
*
* @author
* @email
*/
import java.util.Arrays;

public class RandomArray {

/*
* 测试代码
*/
public static void main(String[] args) {
RandomArray ra = new RandomArray();
System.out.println(Arrays.toString(ra.getRandomArray(10)));
}

/**
* 将新获得的随机数与已产生的其它随机数相比较,若有重复数据,则丢弃,并重来一遍;
* 否则,将新数存入数组。
*
* @param i 数组的大小
* @return 随机数组
*/
public int[] getRandomArray(int i) {
int[] a = new int[i]; // a 随机数数组
for (int m = 0; m < i; m++) { // m 已产生的随机数个数
int temp = random();
if (m == 0)
a[0] = temp;
else {
for (int n = 0; n < m; n++) { // n 遍历已产生的随机数
if (temp == a[n]) {
temp = random();
n = -1;
}
}
a[m] = temp;
}
}
return a;
}

/**
* 随机数发生器
* 0 <= Math.random() < 1
*
* @return 1至10之间的随机整数
*/
private int random() {
return (int) (10 * Math.random() + 1);
}

}
第4个回答  2011-03-09
3, 4, 5, 6, 7, 8, 9];

void swap(int* a, int* b) { // 交换两个元素
int c = *a;
*a = *b;
*b = c;
}

void rand_n(int len, n) { // 打乱table中各个元素之间的顺序
for (int i = 0; i < len; i++) {
swap(&table[i], &table[rand() / len]);
}
for (int i = 0; i < n; i++) { // 输出前n个元素
printf("%d\n", table[i]);
}
}

int main() {
rand_n(sizeof(table)/sizeof(int), 4);
}
相似回答