ArrayIndexOutOfBoundsException-如果将索引加1而不减去1

时间:2019-04-01 21:04:05

标签: java arrays for-loop indexoutofboundsexception

这可能是一个愚蠢的问题,但是我在编程方面还是很新的。为了提高我的技能,我尝试生成0和1的某种“映射”。首先,我生成一个零矩阵。然后在随机点上,在该矩阵中添加1。围绕这一点,我想生成一个与孤岛1同心的孤岛。

问题是,如果我将索引减1,则在28-30行中一切正常,但是如果我将索引加1(31-33行),则得到ArrayIndexOutOfBoundsException。我不知道为什么会这样。

public class map {
    int mapsizex;
    int mapsizey;
    int map[][] = null;

    public map (int mapsizex, int mapsizey) {
        this.mapsizex = mapsizex;
        this.mapsizey = mapsizey;

        map = new int[mapsizex][mapsizey];
        for(int i=0; i < map.length; i++) {
            for(int j=0; j < map[i].length; j++) {
                map[i][j] = 0;
            }
        }
    }
    public void rand_map (int r_nr, int r_size) {
        Random ran = new Random();
        for(int n=0; n < r_nr; n++) {
            map[(int)(ran.nextInt(mapsizex))-r_size][(int)(ran.nextInt(mapsizey))-r_size] = 1;
            for(int i=0; i < mapsizex; i++) {
                for(int j=0; j < mapsizey; j++) {
                    if(map[i][j] > 0) {
                        for(int d=0; d<r_size; d++) {
                            map[i-d][j] = 1;
                            map[i-d][j-d] = 1;
                            map[i][j-d] = 1;
                            map[i+d][j] = 1;
                            map[i+d][j+d] = 1;
                            map[i][j+d] = 1;
                        }
                    }
                }
            }
        }
    }

    public void printmap () {
        for(int i=0; i < map.length; i++) {
            for(int j=0; j < map[i].length; j++) {
                System.out.print(map[i][j]);
            }
        System.out.println();
        }
    }
}

0 个答案:

没有答案