我正在用Java制作一个地下城游戏。我创建了一个将地图存储在2D数组中的方法。该数组如下所示:
[[#, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #],
[#, ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., #],
[#, ., ., ., ., ., ., G, ., ., ., ., ., ., ., ., E, ., #],
[#, ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., #],
[#, ., ., E, ., ., ., ., ., ., ., ., ., ., ., ., ., ., #],
[#, ., ., ., ., ., ., ., ., ., ., G, ., ., ., ., ., ., #],
[#, ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., #],
[#, ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., ., #],
[#, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #, #]]
我现在正在尝试编写一个函数,以便我可以在游戏中打印出地图。到目前为止,我想出了这个:
public void printMap(char[][] map) {
for (int i = 0; i < map.length; i++) {
for (int j = 0; j < map[i].length; i++) {
System.out.print(map[i][j]);
}
}
}
但是,在打印出第一行后,我收到此错误消息。
#########Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9
为什么我收到此错误消息?我怎么能在将来阻止它?
答案 0 :(得分:9)
for(int j=0; j < world[i].length; i++){
// ^ ^ ^
// J J I <- No! Bad dog :-)
您可能希望让变量更加一致。
通过在i
循环中递增j
,您几乎可以保证超出world
数组的末尾(“附近”,因为如果其中一个“子阵列”的大小为零,但根据您的输入数据,这种情况不太可能出现这种情况。)
答案 1 :(得分:5)
你在j循环中递增i而不是j。然而,我没有得到的是为什么它只会在一行之后崩溃。我认为你的第一个数组中只有1个项目,不是吗?
答案 2 :(得分:0)
你在嵌套的for循环中递增i而不是j:
for(int j=0; j < world[i].length; i++){
System.out.print(world[i][j]);
}
更改为:
for(int j=0; j < world[i].length; j++){
System.out.print(world[i][j]);
}