【问题标题】:How to create an array of random elements without duplicates? [duplicate]如何创建一个不重复的随机元素数组? [复制]
【发布时间】:2022-01-16 06:18:11
【问题描述】:
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));
        }
}

如何修改上面的代码,这样如果我输入100,我就有一个100个不重复数字的数组?

谢谢。

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    使用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]);
    }
    

    【讨论】:

      【解决方案2】:

      使用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;
      }
      

      【讨论】:

        【解决方案3】:

        问题重复:Creating random numbers with no duplicates

        改变这个:

        for (int i=0; i<arr.length; i++) {
            arr[i] = r.nextInt(arraySize);
        }
        

        到这里:

        arr = r.ints(0, arraySize).distinct().limit(arraySize).toArray();
        

        arr = r.ints(0, 10000).distinct().limit(arraySize).toArray();
        

        10000 是上限。

        【讨论】:

          猜你喜欢
          • 2012-03-14
          • 2013-10-28
          • 1970-01-01
          • 2014-05-09
          • 2022-01-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多