gpt4 book ai didi

Java:奇怪的 OutOfBoundsException

转载 作者:行者123 更新时间:2023-12-01 19:12:41 25 4
gpt4 key购买 nike

        do{

System.out.println("inside do");
for (int i = 0; i < i2; i++) {

String s2 = m_area.m_items.get(i).returnName();
if (s2.contains(s)) {

itemexist_check = true;
player.addItem(m_area.m_items.get(i));
m_area.m_items.remove(i);
} else {

//do nothing
}
}
itemexist_check = true;
}while(itemexist_check == false);

当这个do语句运行时,它会愉快地执行“player.addItem(m_area.m_items.get(i))”,但是当它到达“m_area.m_items.remove(i)”时(m_items是一个LinkedList) ,它会抛出“OutOfBoundsException:索引 1,大小 1”。通过打印LinkedList的大小以及打印“i”的值,我确定在“m_area.m_items.remove(i)”之前,LinkedList的大小为2,并且“i"是 0。我明白为什么它抛出异常。 LinkedList中显然没有元素0。我不知道的是,为什么它没有在“player.addItem(m_area.m_items.get(i))”上抛出异常?这里有些不对劲,请帮忙。

谢谢

最佳答案

I2 是列表的大小吗?那么你就在循环中停留了太多次迭代。你的继续条件应该是 i < i2-1。

不,当索引为 0 时,remove() 不会抛出异常,仅当索引小于零时才抛出异常。

至于使用 for-each 循环的建议,请小心。通常,您无法修改循环内的列表 - 由于您正在修改 m_area.m_items,因此似乎会应用这里的限制。

关于Java:奇怪的 OutOfBoundsException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7885702/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com