[英]How to create an array of random elements without duplicates?
import java.util.Arrays;
import java.util.Random;
import java.util.Scanner;
public class Test {
private static int[] readArray(int arraySize) {
Random r = new Random();
int[] arr = new int[arraySize];
for (int i=0; i<arr.length; i++) {
arr[i] = r.nextInt(arraySize);
}
return arr;
}
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter array size: ");
int size = sc.nextInt();
int[] arr = readArray(size);
System.out.println(Arrays.toString(arr));
}
}
How to modify above code, so that if I input 100, I have an array of 100 numbers without duplicates?如何修改上面的代码,如果我输入 100,我有一个 100 个数字的数组,没有重复?
Thank you.谢谢你。
Use a while
loop, to add numbers in a Set
(no duplicate) until you reach the good size使用
while
循环,在Set
中添加数字(不重复),直到达到合适的大小
private static Integer[] readArray(int arraySize) {
Set<Integer> unique = new LinkedHashSet<>();
Random r = new Random();
while (unique.size() != arraySize)
unique.add(r.nextInt(arraySize));
return unique.toArray(new Integer[0]);
}
Use Set
to keep track of elements present in the array
till now and make use of it to avoid duplicates使用
Set
来跟踪array
中存在的元素直到现在并利用它来避免重复
private static int[] readArray(int arraySize) {
Set<Integer> set = new HashSet<>();
Random r = new Random();
int[] arr = new int[arraySize];
int random;
for (int i=0; i<arr.length; i++) {
while (set.contains(random = r.nextInt(arraySize)));
arr[i] = random;
set.add(random);
}
return arr;
}
Question is duplicated: Creating random numbers with no duplicates问题重复: 创建不重复的随机数
Change this:改变这个:
for (int i=0; i<arr.length; i++) {
arr[i] = r.nextInt(arraySize);
}
to this:对此:
arr = r.ints(0, arraySize).distinct().limit(arraySize).toArray();
or或者
arr = r.ints(0, 10000).distinct().limit(arraySize).toArray();
10000 is upper limit. 10000 是上限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.