简体   繁体   English

如何创建一个不重复的随机元素数组?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM