我一直在敲头两天,试图确保随机生成器方法不会产生重复。这只是在不导入任何库的情况下与循环有关。我已经来到这个解决方案,从长远来看,这段代码会产生重复吗?如果是,请帮助。
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]);
}
}
答案 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中的元素越多,效率就越低。
但是:只要你将其限制为“不允许重复”,我们就不再谈论“随机”数字了。