gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 16:50:13 25 4
gpt4 key购买 nike

好的,场景是,我想生成一个包含 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com