删除ArrayList元素时的IndexOutOfBoundsException

时间:2013-05-14 17:11:43

标签: java exception arraylist

我在这里有这个代码(使用lwjgl,但这应该没有实际意义)尝试在按下esc键时暂停游戏。我使用带有键的ArrayList来跟踪按下的内容和不按下的内容。

public List<Integer> keys = new ArrayList<Integer>();

public void get() {
    if (isKeyDown(KEY_ESCAPE) && !keys.contains(KEY_ESCAPE)) {
        keys.add(KEY_ESCAPE);
        keyEscape();
    }
}

public void rem() {
    if (!isKeyDown(KEY_ESCAPE) && keys.contains(KEY_ESCAPE))
        keys.remove(KEY_ESCAPE);
}

private void keyEscape() {
    Screen.paused ^= true;
}

这是由循环调用的,它在循环中按顺序执行get()rem()。当我放开ESC时,这给了我一个很棒的java.lang.IndexOutOfBoundsException: Index: 1, Size: 1 keys.remove(KEY_ESCAPE);

任何人都有分享的见解吗?

2 个答案:

答案 0 :(得分:6)

KEY_ESCAPE的价值是多少?

它可能是值为1的int,因此不是删除具有该值的对象,而是删除位置1处的对象,该对象显然不存在。

答案 1 :(得分:3)

ArrayList.remove为您要删除元素的索引采用int参数。在您的情况下,KEY_ESCAPE也恰好是一个整数。

简而言之,您尝试将转义键的Integer值删除为ArrayList的索引