Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 测验算法-更难得到正确答案/更容易得到错误答案_Java_Algorithm_Sorting - Fatal编程技术网

Java 测验算法-更难得到正确答案/更容易得到错误答案

Java 测验算法-更难得到正确答案/更容易得到错误答案,java,algorithm,sorting,Java,Algorithm,Sorting,我正在编写一个测试,为用户提供一个问题,然后用户必须回答 如果用户回答正确,那么获得相同问题的机会就会减少, 如果答案是错误的,应该有更大的机会再次得到相同的问题,然后是得到一个正常的问题 我的解决方案是创建5个包含问题的数组,然后将问题四处移动并按如下方式提供: int rand = random.nextInt(100); if (rand < 5) { // Question answered correct 2 times - 5 % chance

我正在编写一个测试,为用户提供一个问题,然后用户必须回答

如果用户回答正确,那么获得相同问题的机会就会减少, 如果答案是错误的,应该有更大的机会再次得到相同的问题,然后是得到一个正常的问题

我的解决方案是创建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
    }
int rand=random.nextInt(100);
如果(兰特<5){
//问题回答正确2次-5%的几率
}否则如果(兰德>4&&兰德<15){
//问题回答正确1次-10%的几率
}否则,如果(兰德>14&&兰德<35){
//正常问题-20%的机会
}否则,如果(兰德>34&&兰德<65){
//回答错误1次-30%的几率
}否则如果(兰德>64&&兰德<100){
//回答错误2次-35%的几率
}
但假设我对一个问题回答了一两次正确的答案,那么再次得到完全相同的问题的可能性太大了,直到有更多的问题被正确回答

我试图解决这个问题的方法是只生成15到100的随机数,直到有100个问题的正确答案

在我看来,这可以更好地实现,但无法找到解决方案


你知道我该如何改进吗

我将更像这样实现它:

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。诀窍是在回答正确时降低因子。例如,你可以把它减半

要选择要问的问题,请将数组中的所有因素相加(如果有250个问题,则最初的总和将为250,但随着因素的变化,总和将变得不同),并在0和总和之间取一个随机数。假设这个随机数变成110.5。然后你计算这些因素的累积和,直到它们的总和达到110.5。这意味着,遍历数组并对所有因子求和,但当和大于随机数时,您将停止并询问迭代在该点的位置。对于系数较低的问题,你命中它们的几率较低。如果所有的问题都有一个较低的因素,那么机会再次均等


这样,您可以任意增加或减少获得问题的机会(例如,当用户正确获得问题时,将因子减半,当用户错误获得问题时,将因子加倍)。或者你可以,就像在目前的系统中,当他做对一次时,将因子设置为0.5,当他做对两次时,将因子设置为0.25,当他做错一次时,将因子设置为1.5,当他两次出错时,1.75。

我猜你在一个列表或什么东西中保留了所有正确的答案-为什么不在前两个if中添加一个关于这个列表大小的额外条件。

在最后一个
中,如果
-循环,你应该说
rand>64
,因为65没有其他地方可以去。好吧,左侧条件无论如何都是多余的,因为它们已经由
else
建立。