为什么在这里发生ArrayIndexOutOfBoundsException?

时间:2010-11-19 13:55:29

标签: java android arrays bounds

我在Android-App中获得了以下代码:

Event[] events = retrieveEvents();
if (events != null && events.length>0) {
   int eventNr = getFromUserInput();
   eventNr = eventNr % events.length;
   Event event = events[eventNr];
}

retrieveEvents()从Internet获取一些Event,因此这可能会失败但是为空或null。用户可以选择要显示的Event,以避免异常我使用模运算来确保eventNr在范围内。这适用于我在BUT上测试的任何设备:

我收到来自其他用户的错误报告,其中第二行(数组访问)引发ArrayIndexOutOfBoundsException。怎么会发生这种情况?我没有检查到什么条件?我的错误在哪里?

请记住:retrieveEvents()getFromUserInput()函数都可以返回无效数据,但我想我会检查每个案例,那么我的错在哪里?

2 个答案:

答案 0 :(得分:7)

您确定eventNr永远不会消极吗?该检查不在您的引用代码中。问题是,例如,如果eventNr-1events.length为5,-1 % 5 = -1当然events[-1]超出范围。

答案 1 :(得分:2)

这是一个线程应用程序吗? retrieveEvents()是否可能始终返回对同一数组的引用,但是实时修改了数组?如果是这样,那可能是你的问题。