我有一个生成随机算术表达式的应用程序。然后,它会在随机位置 (tag
) 生成一个正确答案,并随后生成三个错误答案,供用户选择。
我最初选择了一个 ArrayList
但它提供重复项。然后我转换了 ArrayList
for loop
中的内容到 Set
它仍然产生重复。然后我更改了初始 ArrayList
到 LinkedHashSet
唉,仍然重复。我想这可能是我的 for loop
中的位置但我试过摆弄位置,我要么遇到重复,要么 Index
问题。
我不想使用 Java 8
的:List<String> deDupStringList3 = strList.stream().distinct().collect(Collectors.toList());
因为它是API/Version
具体的。
For Loop
代码:
List<Integer> answers = new ArrayList<>(new HashSet<Integer>(5));
answers.clear();
int incorrectAnswer;
for (int i = 0; i < 4; i++) {
if (i == locCorrectAnswer) {
answers.add(value);
} else {
if (operator == '+') {
incorrectAnswer = value + rand.nextInt(10) + 1;
} else {
incorrectAnswer = value - rand.nextInt(10) + 1;
}
while (incorrectAnswer == value) {
if (operator == '+') {
incorrectAnswer = value + rand.nextInt(10) + 1;
} else {
incorrectAnswer = value - rand.nextInt(10) + 1;
}
}
answers.add(incorrectAnswer);
}
}
For Loop
代码(使用 ArrayList
并转换为 Set
):
ArrayList <Integer> answers;
Set<Integer> s = new LinkedHashSet<>(answers);
int incorrectAnswer;
for (int i = 0; i < 4; i++) {
if (i == locCorrectAnswer) {
answers.add(value);
} else {
if (operator == '+') {
incorrectAnswer = value + rand.nextInt(10) + 1;
} else {
incorrectAnswer = value - rand.nextInt(10) + 1;
}
while (incorrectAnswer == value) {
if (operator == '+') {
incorrectAnswer = value + rand.nextInt(10) + 1;
} else {
incorrectAnswer = value - rand.nextInt(10) + 1;
}
}
answers.add(incorrectAnswer);
}
s.addAll(answers);
answers.clear();
answers.addAll(s);
}
我确定这是一个简单的错误,但我看不到它。
最佳答案
您也可以尝试以下方法。
Set<Integer> s = new HashSet<>();
//correct value
s.add(value);
while (s.size() < 4)
{
//incorrect value
s.add( value + rand.nextInt(10) + 1);
}
List<Integer> answers = new ArrayList<>(s);
//shuffle
Collections.shuffle(answers);
关于java - 使用 LinkedHashSet 存储随机数但有重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51057810/