生成一个没有重复的随机数组

时间:2016-01-28 08:50:04

标签: java random duplicates

我一直在敲头两天,试图确保随机生成器方法不会产生重复。这只是在不导入任何库的情况下与循环有关。我已经来到这个解决方案,从长远来看,这段代码会产生重​​复吗?如果是,请帮助。

int[] vargu1 = new int[5];

for (int i = 0; i < vargu1.length; i++) {
    int numriSekret = (int) (Math.random() * 10) + 1;
    vargu1[i] = numriSekret;
}

System.out.println(vargu1[i]);
System.out.println();

for (int i = 0; i < vargu1.length; i++) {
    for (int j = 0; j < i; j++) {
        if (vargu1[i] == vargu1[j]) {
            vargu1[i]++;
        }
        System.out.println(vargu1[i]);
    }
}

2 个答案:

答案 0 :(得分:2)

由于您说没有任何库,您可以重新实现数组的Collections.shuffle(...)方法。

int [] randoms = new int[5];

// creating an array containing the numbers 1-10
int [] shuffleArray = new int[10];
for (int i = 1; i <= 10; i++) {
    shuffleArray[i-1] = i;
}

// shuffling that array
Random random = new Random();
for (int i = 0; i < 10; i++) {
    int j = random.nextInt(10);
    int tmp = shuffleArray[i];
    shuffleArray[i] = shuffleArray[j];
    shuffleArray[j] = tmp;
}

// assigning the first 5 values to the random array
for (int i = 0; i < randoms.length; i++) {
    randoms[i] = shuffleArray[i];
}

虽然我必须说Random也需要导入(也需要一个库)

答案 1 :(得分:1)

据我了解你在做什么,一种更好的方式可能是:

List<Integer> myList = new ArrayList<Integer>();
for ( int i = 0; i < expectedNumberOfUniques; i++){
  Integer a = generateRandom();
  while ( myList.contains(a)){
    a = generateRandom();
  }
  myList.add(a);
}

但有一些评论:myList中的元素越多,效率就越低。

但是:只要你将其限制为“不允许重复”,我们就不再谈论“随机”数字了。