我正在编写一个测验,为用户提供一个问题,然后他必须回答。
如果用户回答正确,则获得相同问题的机会应该减少, 如果答案是错误的,那么应该有更大的机会再次得到同样的问题,那么就可以得到一个正常的问题。
我的解决方案是创建包含问题的5个数组,然后移动问题并像这样提供它们:
int rand = random.nextInt(100);
if (rand < 5) {
// Question answered correct 2 times - 5 % chance
} else if (rand > 4 && rand < 15) {
// Question answered correct 1 time - 10 % chance
} else if (rand > 14 && rand < 35) {
// Normal question - 20 % chance
} else if (rand > 34 && rand < 65) {
// Answered wrong 1 time - 30 % chance
} else if (rand > 64 && rand < 100) {
// Answered wrong 2 times - 35 % chance
}
但是,让我说我回答一个问题正确1或2次,有太大的机会再次得到完全相同的问题,直到有更多的问题得到回答是正确的。
我试图解决此问题的方法是仅生成15到100之间的随机数,直到100个问题的答案正确为止。
在我看来,这可以更好地实施,但无法提出解决方案。
我知道如何改进这个吗?
答案 0 :(得分:1)
我会更像这样实现它:
你制作一个浮点数组,每个问题有一个条目,表示询问问题的频率因素。最初,所有问题的因子都是1.诀窍是在正确回答答案时降低因子。例如,你可以减半。
要选择一个要问的问题,你要总结数组中的所有因子(如果你有250个问题,它最初总和为250,但当因子改变时总和会变得不同)并取0之间的随机数和总和。假设这个随机数变为110.5。然后计算因子的累积总和,直到它们总和为110.5。这意味着,遍历数组并总结所有因子,但是当总和变得超过您停止的随机数时,并将问题放在迭代所在的位置。对于较低因子的问题,您击中它们的可能性较低。如果所有问题都有较低的因素,那么机会就会再次出现。
这样,您可以随意增加或减少提出问题的机会(例如,当用户得到问题时将因子减半,并在错误时将其加倍)。或者你可以像在当前系统中那样,当他一次正确时将因子设置为0.5,当他两次正确时将因子设置为0.25,当他错误一次时设置为1.5,当他错误两次时设置为1.75。 p>
答案 1 :(得分:0)
我猜你在列表或其他东西中持有所有正确的答案 - 为什么不在前两个ifs中添加一个关于此列表大小的额外条件。