【问题标题】:IndexOutOfBoundsException: Index: 3, Size: 3IndexOutOfBoundsException:索引:3,大小:3
【发布时间】:2016-02-13 21:18:25
【问题描述】:

我正在创建一个简单的游戏,其中 2 名玩家从一堆中取出硬币。这些堆是数组列表的每个元素,每个堆的硬币数量是像这样存储在其中的整数。

3 堆不同价值的硬币:

[4,5,2]

但是我遇到了这个异常

Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 3, Size: 3

这是我的方法

static void removeCoinsAt(int index, int numCoins){
    //exception on this line
    coins.set(index, coins.get(index) - numCoins);
    for(int i = 0; i < coins.size(); i ++){
        int val = coins.get(i);
        if (val == 0) {
            coins.remove(i);
        }
    }
}

即使在 index = 3 和 numCoins = 2 时也会发生这种情况。我尝试在任一索引上添加 -1

coins.set(index-1, coins.get(index-1) - numCoins);

但我仍然以某种方式遇到此错误。我知道 Arraylist 从 0 开始计算其元素,并且我查看了这些解决方案 hereherehere,但我仍然无法弄清楚。

【问题讨论】:

  • 你的硬币数组有多大??是 3 吗?
  • 检查你有错误的那一行(你会在错误响应中找到它),然后想一想,为什么会出现错误以及为什么这样的值会出现在有错误的地方。这种方法真的没那么难,而且当你想获得编程感时,你要做的第一件事就是发现并纠正自我错误。是的,这是一个自找困难的地方,但之后你会尝试自己解决问题。

标签: java arraylist indexing elements


【解决方案1】:

您有一个包含三个元素的列表。这些元素位于索引012。你打电话给removeCoinsAt(3, 2)。你的方法说coins.set(index, coins.get(index) - numCoins);。这意味着它正在尝试获取和设置索引3 处的值,该索引在列表中不存在。

显然,您无法调整超出列表末尾的索引的值,而且您知道列表索引只能达到 2。那么,您为什么希望 removeCoinsAt(3, 2) 起作用?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-28
    相关资源
    最近更新 更多