我在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()
函数都可以返回无效数据,但我想我会检查每个案例,那么我的错在哪里?
答案 0 :(得分:7)
您确定eventNr
永远不会消极吗?该检查不在您的引用代码中。问题是,例如,如果eventNr
为-1
且events.length
为5,-1 % 5 = -1
当然events[-1]
超出范围。
答案 1 :(得分:2)
这是一个线程应用程序吗? retrieveEvents()是否可能始终返回对同一数组的引用,但是实时修改了数组?如果是这样,那可能是你的问题。