好的,场景是,我想生成一个包含 4 个不同
随机数的列表,这将代表测验应用程序的 4 个随机选择。 4 个随机选项之一将是正确答案,因此我们已经知道正确选项的索引。这个正确的索引或数字必须包含在随机数列表中。
例如:假设我们有一个长度为 100 的数组
,其中包含代表 100 个选择的字符串
值对于一个问题,正确选择的index
是45
。现在我们想要这个问题有 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/