Error : “Thread-1” java.lang.IndexOutOfBoundsException

Error : “Thread-1” java.lang.IndexOutOfBoundsException

我有一些 trivia/unscramble 机器人的代码,它 运行 在服务器中,用户在时间到之前尝试猜测问题的答案。代码编译正常,但是在线程 运行 大约 30-45 分钟后,我收到一个错误并且琐事停止工作。这是我得到的错误:

Exception in thread "Thread-1" java.lang.IndexOutOfBoundsException: 
  Index: 973, Size 965
    at java.util.ArrayList.rangeCheck(Unknown Source)
    at java.util.ArrayList.get(Unknown Source)
    at org.emulinker.kaillera.model.impl.Trivia.run(Trivia.java:251)
    at java.lang.Thread.run(Unknown Source)

这是 org.emulinker.kaillera.model.impl.Trivia 的代码,从第 249 行开始:

        else{
            temp = generator.nextInt(questions.size() - 1);
            questions_count = questions_num.get(temp);
            questions_num.remove(temp);
        }

知道如何解决这个问题吗?

我不确定 Java 还有哪些其他信息可以 你使这更容易。

它会告诉您 确切 Trivia.java:251、集合大小 965 和您尝试使用的索引 973。当然这就足够了?

通常情况下,我几乎没有机会尝试找出那几百行中的哪一行是第 251 行,但是,我现在很无聊,所以我会试一试(而且,在任何情况下情况下,您已经用相关行替换了大量代码转储)。错误的行似乎是:

 else{
     temp = generator.nextInt(questions.size() - 1);
     questions_count = questions_num.get(temp);       // << THIS ONE
     questions_num.remove(temp);
 }

现在我不打算遍历您似乎认为满足 "smallest example that exhibits the problem" 的 "War and Peace" 风格的代码片段:-)

但我敢打赌 questionsquestions_num 在某处的尺寸存在差异,假设它们甚至 尺寸相同过去的某个时间点。由于上面 else 块中的第三行,或者更准确地说,缺少以相同方式影响 questions 的第四行,它们很可能已经分开。

尽管 questions_num 的大小仅为 965,但您使用 questions 从生成器中获得了 973,这一事实几乎可以肯定。

也许让它们保持同步是个好主意。

Exception in thread "Thread-1" java.lang.IndexOutOfBoundsException:
Index: 973, Size 965

这个异常是不言自明的。 questions_num 的大小为 965,而您正试图在边界外访问它 i.e. 973

JavaDocs所说

IndexOutOfBoundsException is Thrown to indicate that an index of some sort (such as to an array, to a string, or to a vector) is out of range.