【发布时间】:2018-06-27 08:14:34
【问题描述】:
我有一个生成随机算术表达式的应用程序。然后它会在随机位置 (tag) 生成一个正确答案以及三个后续的错误答案,供用户选择。
我最初选择的是ArrayList,但它提供了重复项。然后,我将for loop 中的ArrayList 内容转换为Set,它仍然产生重复。然后我将最初的ArrayList 更改为LinkedHashSet,唉,仍然重复。我在想这可能是我的for loop 中的位置,但我试过弄乱位置,我遇到重复或Index 问题。
我不想使用 Java 8's: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);
}
我确定这是一个简单的错误,但我看不到它。
【问题讨论】:
-
您应该遵循的一般模式是循环迭代并生成不正确的答案,将它们添加到 集合,直到集合有 3 个不正确的答案。
-
现在反对的是什么?
-
@TimBiegeleisen 我希望正确答案和错误答案出现在随机位置。这仍然适用于这种方法吗?
标签: java android arraylist set linkedhashset