当我尝试迭代我的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次。我仍然不知道为什么。
答案 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相关吗?)