我有一些琐事/解密机器人的代码,它在服务器内部运行,用户在时间到来之前尝试猜测问题的答案。代码编译好但是在运行线程大约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);
}
有关如何解决此问题的想法吗?
答案 0 :(得分:4)
我不确定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);
}
现在我不打算通过您认为完整的#34; War and Peace&#34;风格的代码片段来满足显示问题的最小范例&#34; 34; : - )
但是我可以肯定地说questions
和questions_num
在某个地方的大小有所不同,假设他们甚至 相同的大小过去的某些观点。由于上面else
区块中的第三条线,或者更准确地说,缺少以同样方式影响questions
的第四条线,它们很可能会发生分歧。
尽管questions
的大小仅为965,但使用questions_num
从生成器获得973的事实使得这几乎是确定的。
将它们保持同步可能是一个好主意。
答案 1 :(得分:2)
线程中的异常&#34;线程-1&#34; java.lang.IndexOutOfBoundsException:
指数:973,规格965
此例外不言自明。 questions_num
的大小为965,您正试图在边界i.e. 973
之外访问它
正如JavaDocs所说
IndexOutOfBoundsException
被抛出以指示某种索引(例如对于数组,指向 字符串或矢量)超出范围。