当前位置: 首页 > 知识库问答 >
问题:

如何创建没有重复项的随机元素数组?[副本]

端木高卓
2023-03-14
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个数字的数组,没有重复?

谢谢你。

共有3个答案

琴修为
2023-03-14

问题是重复的:创建没有重复的随机数

更改此项:

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是上限。

穆毅然
2023-03-14

使用while循环,在集合中添加数字(无重复),直到达到合适的大小

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

干茂才
2023-03-14

使用Set跟踪到目前为止数组中存在的元素,并利用它避免重复

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

 类似资料:
  • 我试图创建一个没有重复的随机数组。 任务是从用户那里获取一个整数数组和最大值,用0到最大值之间的随机数填充数组,并显示没有重复的随机数组,不使用任何其他类,除了随机和扫描仪。 这是一个示例输出: 请输入数组的大小:10 请输入最大值:50 [39,2,17,49,12,19,40,31,42,15] 我需要帮助删除重复的内容。我不确定我所做的是否正确,我是一个初学者,但这是我目前所做的。非常感谢帮

  • 在本例中,最大值仅为5,因此我可以逐个检查副本,但如何以更简单的方式执行此操作?例如,如果最大值为20,该怎么办?谢谢

  • 问题内容: 在这种情况下,MAX仅为5,因此我可以一张一张地检查重复项,但是如何以更简单的方式进行检查呢?例如,如果MAX的值为20,该怎么办?谢谢。 问题答案: 最简单的方法是创建一个可能数字的列表(1..20或任何数字),然后用对其进行混洗。然后,只需考虑你想要的许多元素。如果你的范围最终等于你需要的元素数量(例如,用于洗牌的卡片),则这非常好。 如果你想要(说)1..10,000范围内的10

  • 问题内容: 我尝试使用,但一些数字相同。有没有一种方法/模块来创建唯一的随机数列表? 问题答案: 这将返回从0到99范围内选择的10个数字的列表,没有重复。 参考你的特定代码示例,你可能希望一次从文件中读取所有行,然后从内存中的已保存列表中选择随机行。例如: 这样,你只需要在循环之前实际从文件中读取一次即可。与返回文件开头并为每次循环迭代再次调用相比,执行此操作效率更高。

  • 问题内容: 在Python 的列表中,以下代码给出此输出: 是否存在使用JavaScript中的数组执行此操作的简便方法? 我编写了以下函数来做到这一点,但是有没有更短或更短的东西呢? 问题答案: 您可以这样做: 它在每次迭代中将数组加倍,因此可以创建很少迭代的真正大数组。 注意:您还可以通过使用代替来改善您的功能,因为每次迭代都会创建一个新的数组。像这样(作为一个如何使用数组的示例显示):

  • 问题内容: 我知道这个问题有很多种,但是我还没有找到与我的效率问题相关的答案。 我有下面的代码工作正常。 我有一个10个项目的数组,可以从中随机选择一个项目(按Enter键)。该代码保留了不能随机选择的5个最近选择的数组(以避免随着时间的推移而重复过多)。 如果chooseName()函数最初选择了最近5次使用的名称,它只会中断并再次调用自身,重复直到找到“唯一”名称。 我有两个问题: 说这是“递