我有一个可生成随机算术表达式的应用程序。然后,它会在随机位置(attachment
)上生成正确答案,并随后生成三个错误答案,供用户选择。
我最初使用的是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
我确定这是一个简单的错误,但看不到。
答案 0 :(得分:1)
只需创建以下答案集即可:
Set<String> answers = new LinkedHashSet<String>();
现在每个值只能出现1次。可以添加它而不会出现错误,但是在列表中只有一次。 而且您仍然可以迭代/循环遍历。
答案 1 :(得分:1)
您也可以尝试以下方法。
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);
答案 2 :(得分:0)
您仍在循环中调用answers.addAll(s)
。尽管在任何给定的迭代中s
中都不会有重复项,但是您仍然会从不同的迭代中得到重复项。
由于您不希望重复,因此没有理由首先使用List
。任何Set
都将删除重复项,而LinkedHashSet
将保留插入顺序。