从数组中的java平铺地图

时间:2014-07-06 22:46:39

标签: java arrays nullpointerexception tile

我正在尝试迭代2D整数数组,以使用Java的Graphics2D生成平铺地图。

    int[][] mapArray = {{1, 1, 1, 1, 1, 1, 1, 1},
                    {1, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 1},
                    {1, 0, 0, 0, 0, 0, 0, 1},
                    {1, 1, 1, 1, 1, 1, 1, 1}};

    public void draw(Graphics2D g2d){
    for(int y = 0; y < mapArray.length; y++){
        for(int x = 0; x < mapArray[0].length; x++){
            if(mapArray[x][y] == 1){
                 ImageIcon ic = new ImageIcon("/Textures/stone.jpg");
                 g2d.drawImage(ic.getImage(), x, y, null);
            }
            else if(mapArray[x][y] == 0){
                 ImageIcon ic = new ImageIcon("/Textures/water.jpg");
                 g2d.drawImage(ic.getImage(), x, y, null);
            }

我似乎无法绕过迭代2D数组的逻辑。理想地,每个0表示水瓦片,而每个1表示石瓦片。每次我运行时都会得到一个NullPointerException

2 个答案:

答案 0 :(得分:1)

x和y是错误的方式

public void draw(Graphics2D g2d){
    for(int y = 0; y < mapArray.length; y++){
        for(int x = 0; x < mapArray[y].length; x++){ //you want to use y here not 0
            if(mapArray[y][x] == 1){                 //first box is outer array second is inner one
                ImageIcon ic = new ImageIcon("/Textures/stone.jpg");
                g2d.drawImage(ic.getImage(), x, y, null);
            } else if(mapArray[y][x] == 0){
                ImageIcon ic = new ImageIcon("/Textures/water.jpg");
                g2d.drawImage(ic.getImage(), x, y, null);
            }
        }
    }
}

答案 1 :(得分:1)

我可能会在您的代码中看到两个大问题,在您的代码中,“y”代表行,而“x”代表列,但在if语句中,您正在选择[column] [row]并且在干运行时你是可能计算[row] [column],其次你总是计算第一行中存在的列。如果你的数据结构在这种情况下总是nXn它会起作用,但在任何其他情况下你会得到不同的结果,你可能会遇到ArrayIndexOutofBound异常。