迭代对象数组时出现NullPointerException

时间:2016-04-30 09:16:22

标签: java nullpointerexception

当我尝试迭代我的2D对象数组时,我得到一个NullPointerException。我知道这意味着我尝试使用的对象是null,但我不明白为什么。我有3个类,Main,Map和Tile。该数组是Map类中的2D数组。然后我在Main中创建一个名为map1的新Map,并尝试使用for循环从每个tile中读取一些值。

主:

public class Main {
    public static void main(String[] args) {
        Map map1 = new Map(5, 6);
        map1.listTiles();
    }
}

地图:

public class Map {

    int width;
    int height;
    Tile[][] tiles;

    public Map(int Width, int Height) {
        width = Width;
        height = Height;
        tiles = new Tile[width][height];
    }

    public void listTiles() {
        for(Tile[] tileArray : tiles){
            for(Tile tile : tileArray) {
                System.out.println(tile.tileType);
            }
        }
    }
}

瓷砖:

public class Tile {
    public String tileType = "Grass";
    public int xCoord = 0;
    public int yCoord = 0;
}

事实证明,将System.out.println(tile.tileType);替换为System.out.println(tile);会导致将空值写入控制台30次。我仍然不知道为什么。

1 个答案:

答案 0 :(得分:1)

那是因为你没有创建任何Tile个对象,当然,你没有把它们放在数组中。因此,您首先需要创建对象,将它们放在数组中,然后您就可以将它们打印出来(假设您创建了有效的toString()方法,当您只打印tile时)。

例如:

 public Map(int Width, int Height) {
        width = Width;
        height = Height;
        tiles = new Tile[width][height];
        for (int i = 0; i < width; i++) {
             for (int j = 0; j < width; j++) {
                  tiles[i][j] = new Tile();
             }
        }
    }

但同样,最好是在(i,j)位置为新的Tile位置创建特定方法,为Tile提供所有需要的变量(你想要xCoord和yCoord与i和j相关吗?)