我正在尝试将 2D 数组与数字进行比较,但它抛出了一个异常。
法典
import org.newdawn.slick.Color;
public class Main {
public static int[][] map = {{0, 2, 1, 3, 4, 1, 1, 3, 4, 1, 3, 5, 1},
{1, 2, 1, 3, 4, 1, 1, 3, 4, 1, 3, 5, 1},
{2, 2, 1, 3, 4, 1, 1, 3, 4, 1, 3, 5, 1},
{3, 2, 1, 3, 4, 1, 1, 3, 4, 1, 3, 5, 1},
{4, 2, 1, 3, 4, 1, 1, 3, 4, 1, 3, 5, 1},
{5, 2, 1, 3, 4, 1, 1, 3, 4, 1, 3, 5, 1},
{6, 2, 1, 3, 4, 1, 1, 3, 4, 1, 3, 5, 1},
{7, 2, 1, 3, 4, 1, 1, 3, 4, 1, 3, 5, 1}};
public static void main(String args[]) {
int I = 0;
int II = 0;
for (int y = 0; y < 7; y++) {
for (int x = 0; x < 11; x++) {
if (map[x][y] == 0) {
g.setColor(Color.blue);
g.fillRect(I, II, 100, 100);
}
if (map[x][y] == 1) {
g.setColor(Color.orange);
g.fillRect(I, II, 100, 100);
}
if (map[x][y] == 2) {
g.setColor(Color.white);
g.fillRect(I, II, 100, 100);
}
if (map[x][y] == 3) {
g.setColor(Color.red);
g.fillRect(I, II, 100, 100);
}
if (map[x][y] == 4) {
g.setColor(Color.green);
g.fillRect(I, II, 100, 100);
}
if (map[x][y] == 5) {
g.setColor(Color.gray);
g.fillRect(I, II, 100, 100);
}
I = x * 100;
I = y * 100;
}
}
}
}
它的抛出例外是java.lang.ArrayIndexOutOfBoundsException: 8
这是针对裸露的平铺地图系统,如果要测试它,则需要 slick2D 并需要将其放入渲染循环中。
这是因为您正在尝试访问行8
并且您只有最大位置7
。
请记住,行和列的索引从位置 0 开始,到 length-1 结束。
另外,您必须记住,数组的第一个位置(在您的情况下为 x
,是行,y
是列。
array[rows][columns]
因此,您必须更改循环中变量的顺序。喜欢这个:
for(int x = 0; x < map.length; x++){
for(int y = 0; y < map[x].length; y++){
其余代码可以像上面一样。
我希望这对你有帮助!