2013-05-14 124 views
0

我有這個代碼在這裏(使用lwjgl,但應該是沒有爭議的)嘗試按Esc鍵時暫停遊戲。我使用帶有鍵的ArrayList來跟蹤什麼是按下的,哪些不是。IndexOutOfBoundsException當刪除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: 1keys.remove(KEY_ESCAPE);

任何人都有任何見解分享?

+2

爲什麼不使用'boolean'標誌而不必每次檢查'ArrayList'?似乎不必要的昂貴。 – Quetzalcoatl 2013-05-14 17:14:19

+0

考慮爲您的鍵值使用'enum'而不是'Integer'值 – 2013-05-14 17:17:17

+0

相關但不是重複http://stackoverflow.com/questions/34643366/java-arraylist-remove-object-indexoutofboundsexception – Raedwald 2016-01-07 08:03:43

回答

6

KEY_ESCAPE的值是什麼?

它可能是int值爲1,所以不是用該值刪除對象,而是刪除位置1上顯然不存在的對象。

+0

啊,你對了。我使用'keys.remove(Integer.valueOf(KEY_ESCAPE));'修復了它。謝謝! – LulzCop 2013-05-14 17:17:22

+0

很高興我能幫到你! – 2013-05-14 17:27:49

3

ArrayList.remove爲您想要刪除元素的索引獲取int參數。在你的情況下,KEY_ESCAPE也恰好是一個整數。

總之,您嘗試刪除您的ArrayList的索引的轉義鍵的整數值!