【问题标题】:array index out of bound java数组索引越界java
【发布时间】:2016-03-25 04:18:42
【问题描述】:

假设numberTracker = {1,15,6,8}numberString = {1,1,5,6,8}numberString 中的每个号码都有自己的磁贴。 我尝试将例如 1,5 设置为相同的平铺颜色,因为它在 numberTracker 中等于 15,而 tileIterator 包含与 numberString 相同的长度。代码完美运行,并且可以做到做。但是我得到java.lang.IndexOutOfBoundsException: Index: 5, Size: 5

ListIterator < String > nmbTracker = numberTracker.listIterator();
ListIterator < Tile > tileIterator = tiles.listIterator();
Tile t;

int x = 0;
int y = 0;

while (nmbTracker.hasNext()) {

    if (numberTracker.get(x).equals(numberString.get(y))) {

        t = tileIterator.next();
        t.setColor(tilePanel2.changeColour());
        if (numberTracker.size() - 1 != x) {
            x++;
        }
        if (numberString.size() - 1 != y) {
            y++;
        }


    } else {
        x++;
        t = tileIterator.next();
        t.setColor(tilePanel2.changeColour());
        Color color = t.getColor();
        t = tileIterator.next();
        t.setColor(color);
        y++;
        y++;


    }

    repaint();
}

【问题讨论】:

  • 为什么不自己调试看看呢?

标签: java arrays indexoutofboundsexception listiterator


【解决方案1】:

嗯。当您尝试访问包含 4 个元素的列表中的索引 5 时,就会发生这种情况。您正在使用迭代器的 hasNext() 来查看是否有任何可用的 next 值,但您切换到使用 get(x) 来访问列表值。 选择一个

如果您想坚持使用get(x),请将hasNext() 去掉并替换为while(x&lt;4 &amp;&amp; y&lt;5),这样列表访问就不会越界。

如果您想要iterator,而不是使用get(x),请使用迭代器的next() 方法。

至少在这种情况下,互换使用两者并不好。

【讨论】:

    【解决方案2】:

    我认为这是确凿的证据:

    y++;
    y++;
    

    下一次,你会比你正在检查的列表多一个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-15
      • 2015-10-26
      • 2016-01-04
      • 1970-01-01
      相关资源
      最近更新 更多