2

我在我的 Android 应用程序中得到以下代码:

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

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

我从其他用户那里得到错误报告,其中倒数第二行(数组访问)抛出ArrayIndexOutOfBoundsException. 这怎么可能发生?我没有检查什么条件?我的错误在哪里?

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

4

2 回答 2

7

你确保这eventNr永远不会是负面的吗?支票不在您引用的代码中。问题是,例如,如果eventNr-1并且events.length是 5,-1 % 5 = -1当然events[-1]是超出范围的。

于 2010-11-19T13:58:20.453 回答
2

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

于 2010-11-19T14:00:53.797 回答