将2D阵列的一部分保存到另一个2D阵列Java中

时间:2014-02-23 16:52:31

标签: java arrays multidimensional-array

我有一个包含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。

3 个答案:

答案 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;
}