数组索引越界 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++;
下一次,您将比正在检查的列表多一个。
假设 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++;
下一次,您将比正在检查的列表多一个。