我有一个包含ASCII地图的2D数组。我有另一个名为botLook()
的函数,它需要将地图的一部分存储到另一个2D数组中。这是机器人可以看到的地图的一部分。到目前为止我已经编写了一个函数但是不断出错。机器人可以看到自己周围的半径为2。
public char[][] botLook3(){
char[][] show = new char[5][5];
int i = 0;
int j = 0;
for (int x = posX-2; i<posX+3; x++){
for (int y = posY-2; y<posY+3; y++){
if (i>=0 && i<rows && j>=0 && j<cols){
System.out.println(i);
System.out.println(j);
if(Math.abs(posX-i)+Math.abs(posY-j)<4){
show[x][y] = myWorld[i][j];
}else{
show[x][y] = 'X';
}
}else{
show[x][y] = '?';
}
i++;
}
j++;
}
return show;
}
这是我收到的错误消息;
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 12
at GameLogic.botLook2(GameLogic.java:67)
at PlayGame.main(PlayGame.java:32)
谢谢,Ciaran。
答案 0 :(得分:0)
由于i和j都是相对于posX和posY设置的,如果posX或posY大于5,在循环中的某个点你将引用数组中大于5的索引,因此不在的结合的
答案 1 :(得分:0)
发生异常是因为循环中的索引值i或j中的任何一个超出了两个2d数组show和myworld中的至少一个的大小。 请检查i&amp;的值。 j在循环中。
System.out.println(i);
System.out.println(j);
答案 2 :(得分:0)
public char[][] botLook(){
char[][] show = new char[][]{
new char[]{ '?','?','?','?','?'},
new char[]{ '?','?','?','?','?'},
new char[]{ '?','?','?','?','?'},
new char[]{ '?','?','?','?','?'},
new char[]{ '?','?','?','?','?'}
};
for (int i = Math.max( 2 - posX, 0); i< Math.min( (cols + 2) - posX, 5); i++){
for (int j = Math.max( 2 - posY, 0); i< Math.min( (rows + 2) - posY, 5); i++){
if(Math.abs(i - 2) + Math.abs(j - 2) < 4){
show[i][j] = myWorld[posX - 2 + i][ posY - 2 + j];
}else{
show[i][j] = 'X';
}
}
}
return show;
}