java - 类的二维数组为空

标签 java arrays class object

我正在开发一个程序,该程序使用 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/

相关文章:

java - Spring:读取inputStream后如何使用@RequestBody

Java链表集合方法

ruby-on-rails - 我可以在 Rails 中使用 link_to 创建链接数组吗?

class - 项目中有太多的单例 - 这是一种不好的做法吗?

c++ - 我怎么知道指向基类对象的指针数组中元素的类型是什么,它将为派生类分配内存

java - 如何从 Java .class 文件获取方法体偏移量

java - 比较两个字符串,如果一个字符串包含另一个字符串的所有字符,则返回 true

java - 如何使用api将HTML文件转换为PPT文件?

java - 有没有办法在定义函数的返回类型时指定数组的长度?

c - 具有多个成员的结构数组