我正在开发一个程序,该程序使用 Map 类存储 Tile 对象的二维数组以形成网格。在 map 类中:
public class Map {
private int x = 80;
private int y = 40;
//store the entire map - a 50x50 2d array
private tile[][] grid = new tile[x][y];
public void Map() {
initialize();
grid[0][0].tile('.');
}
public void initialize() {
for (int i = 0; i < y; i++) {
for (int j = 0; j < x; j++) {
grid[j][i] = new tile();
}
}
}
public void display() {
for (int i = 0; i < y-1; i++) {
for (int j = 0; j < x-1; j++) {
System.out.println("Pass [" + j + "][" + i + "]");
System.out.print(grid[j][i].c());
}
System.out.println();
}
}
}
在图 block 类中:
public class tile {
private String title = "null";
private int id = 0;
private char c = ' ';
private boolean isVis = false;
public tile() {
id = 1;
format(id);
}
private void format(int n) {
c = 'A';
title = "foo";
isVis = false
}
public char c() { return c; }
}
运行程序时,我得到以下输出:
Pass [0][0]
Exception in thread "main" java.lang.NullPointerException
at Map.display(Map.java:22)
at rogue.main(rogue.java:7)
高亮行:
System.out.print(grid[j][i].c());
我认为正在发生的事情是类在创建后被初始化。当我只是打印
System.out.print(grid[j][i]);
它返回一个充满“nullnullnull”的页面 我该怎么做才能确保正确初始化对象?
最佳答案
public void Map()
不是构造函数(它是常规方法),因此当您创建 Map
实例时不会调用它,并且永远不会调用您的 initialize
方法。
改成
public Map()
关于java - 类的二维数组为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40720753/