我有一份问题清单。每个问题至少有2个答案可供选择。目前只有一个选项是正确的。
以相同的顺序获得答案会向学生传授答案所在的位置,而不是学习问题的实际答案。亨赫洗牌的答案很好。
问题:我使用索引来跟踪每个问题的正确答案。这种方式不会随意改变答案。
目前的问题结构:
question structure {
correct answer, index of where the correct answer is in the array below
list of answers, simple array of strings
}
当改组(Fisher-Yates shuffle)时,正确的答案会在数组中移动,索引会发生变化。
一种可能的解决方案是将结构切换到此,但效率低下:
question structure {
list of answers
}
answer structure {
boolean correct answer (true, false)
string answer
}
有更好的方法吗? 如何跟踪阵列中的正确答案?
我在考虑将答案数组保存在一个列表中,然后使用地图并随机播放该地图。看起来像过度杀伤,复杂和内存以及CPU饥饿。这样我就可以将索引保持正确的答案。
我盯着自己看不出这个问题。
注意:这个程序原型是用C#编写的,但它并不重要。
答案 0 :(得分:1)
在shuffle期间,算法选择两个索引并在这些索引处交换数组元素。您需要做的就是检查当前答案索引是否是这些索引之一。如果是这样,请将其更改为另一个。
例如
// Given two elements i, and j which will be used to swap, update answer index
if answerIndex = i then
answerIndex <- j
else if answerIndex = j then
answerIndex <- i
end
答案 1 :(得分:1)
好吧,如果是我,我会用int ID
识别每个答案,然后通过ID识别正确的答案(像int Correct_ID
那样。所以,当用户选择一个问题时你所要做的就是比较Correct_ID和所选问题的ID,无论你洗牌多少次。
它与布尔概念类似,但打开了其他可能性:如果您对答案执行其他操作,此ID也可以派上用场,因为比int
比string
更快。的。
(如果我记得一个情况作为一个例子,我会更新,目前还不能提出一个)
答案 2 :(得分:0)
嗯,这是一个Python示例。
>>> items = [
... (0, 'Apple'),
... (1, 'Banana'),
... (2, 'Orange'),
... (3, 'Pear'),
... ]
>>> import random
>>> random.shuffle(items)
>>> items
[(1, 'Banana'), (2, 'Orange'), (0, 'Apple'), (3, 'Pear')]
>>> for key, value in items:
... print key, value
...
1 Banana
2 Orange
0 Apple
3 Pear
>>>
关键是你可以随机播放记录,其中每条记录都有一个与之关联的ID,而不仅仅是字符串值。
您可以为每个项目存储唯一ID,或者只将其中一个标记为“正确”答案(因此每个项目都有一个True或False,只有一个是True)。