代码之家  ›  专栏  ›  技术社区  ›  theomega

为什么这里会发生arrayindexoutofboundsException?

  •  2
  • theomega  · 技术社区  · 14 年前

    我的Android应用程序中有以下代码:

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

    retrieveEvents()获取一些 Event 来自Internet,因此这可能会失败,虽然是空的或 null . 用户可以选择 事件 为了显示,为了避免异常,我使用modulo操作确保 eventNr 在范围内。在我测试过的任何设备上都可以,但是:

    我从其他用户那里得到错误报告,其中最后第二行(数组访问)抛出一个 ArrayIndexOutOfBoundsException . 怎么会这样?我有什么条件没有检查?我的错误在哪里?

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

    2 回复  |  直到 10 年前
        1
  •  7
  •   T.J. Crowder    14 年前

    你保证了吗 eventNr 从不消极吗?支票不在你的代码里。问题是如果,例如, 事件事件 -1 events.length 是5, -1 % 5 = -1 当然 events[-1] 超出界限。

        2
  •  2
  •   Beska    14 年前

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