java - 如何在JAVA中生成包含特定数字的不同随机数列表?

标签 java random

好的,场景是,我想生成一个包含 4 个不同 随机数的列表,这将代表测验应用程序的 4 个随机选择。 4 个随机选项之一将是正确答案,因此我们已经知道正确选项的索引。这个正确的索引或数字必须包含在随机数列表中。

例如:假设我们有一个长度为 100 的数组,其中包含代表 100 个选择的字符串值对于一个问题,正确选择的index45。现在我们想要这个问题有 4 个随机选择,包括索引 45,这样索引列表将类似于 {2, 91, 45, 17}。此外,该列表不应包含重复的数字。

知道如何在 Java 中实现这一点吗?

最佳答案

对于 Java 6 及更高版本:

final int maxNumber = 100;
final int numbersToGenerate = 4;
final int correctAnswer = 45;

Set<Integer> possibleAnswers = new HashSet<>();
Random random = new Random();

// add correct answer
possibleAnswers.add(correctAnswer);

// add as much random answers as needed, the usage of a set prevents duplicates
while(possibleAnswers.size() < numbersToGenerate) {
    possibleAnswers.add(random.nextInt(maxNumber));
}

// convert set to list and shuffle it
List<Integer> answers = new ArrayList<Integer>(possibleAnswers);
Collections.shuffle(answers, new Random(System.nanoTime()));

对于低于 6 的 Java 版本,您必须编写自己的 shuffle 方法,因为据我所知,Collections.shuffle 是在 Java 6 中引入的。

我最初建议使用Java 8的随机api,但发现我的想法有一个bug。如果生成的随机数数组包含正确答案,则它将不起作用。供您理解:

不工作!!!

final int minNumber = 1;
final int maxNumber = 100;
final int numbersToGenerate = 3;

final int[] ints = new Random().ints(minNumber, maxNumber)
.distinct().limit(numbersToGenerate).toArray();

List<Integer> possibleAnswers = asList(ints);
possibleAnswers.add(correctAnswerIndex);
Collections.shuffle(possibleAnswers, new Random(System.nanoTime()));

不工作!!!

关于java - 如何在JAVA中生成包含特定数字的不同随机数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41789600/

相关文章:

java - 使用 Platform Channels 在 Flutter 中调用原生库

java - 如何使Java(AppEngine)中的延迟任务在失败时不重复?

java - Java中自注册对象的静态 block 无法执行

java - 利用 Java 流 API 从本身持有流式集合的对象中检索数据

javascript - 在 Javascript 中显示来自数据库的图像链接 javascript 数组的 3 个随机图像

java - 禁用时如何阻止 JButton 变灰?

java - 在Java中计算生成的随机数中的最大和最小数

c++ - 在 C++ 中对数组执行随机排列

javascript - 从数组中获取随机数,不重复(使用计时器)

java - java中的随机值取决于字段类型