数组索引越界 java

array index out of bound java

假设 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();
}

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

如果你想坚持 get(x),去掉 hasNext() 并用 while(x<4 && y<5) 替换它,这样列表访问就不会越界。

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

交替使用两者并不好,至少在这种情况下是这样。

我认为这是确凿的证据:

y++;
y++;

下一次,您将比正在检查的列表多一个。