访问多维数组时抛出NullPointerException



我想做一个游戏,需要你放置块,类似于我的世界。但是,我已经得到了一些麻烦,试图使一个多维数组,将存储的x和y坐标块放置。代码如下:

public Block[][] blocks = new Block[maxBlockX][maxBlockY];

它给我一个空指针异常。

Exception in thread "main" java.lang.NullPointerException
    at net.lojana.src.World.loadWorldAsReg(World.java:16)
    at net.lojana.client.SpriteCraft.display(SpriteCraft.java:45)
    at Run.main(Run.java:5)

在我的World class中引用了以下方法loadWorldAsReg()。方法在这里。

public void loadWorldAsReg() {
    for (int x = 0; x < maxBlockX; x += 20) {
        for (int y = 0; y < maxBlockY; y += 20) {
            blocks[x][y].draw();
        }
        }
}

还引用了下面的方法

public void draw() {
    getTexture().bind();
    shapes.drawSquare(new Point(x, y), new Point(x + 20, y + 20));
}

有人知道如何解决这个奇怪的错误吗?感谢!

您的数组中满是null

您需要首先为数组中的每个元素创建一个Block实例

改成:

public void loadWorldAsReg() {
    for (int x = 0; x < maxBlockX; x += 20) {
        for (int y = 0; y < maxBlockY; y += 20) {
        blocks[x][y] = new Block();
        blocks[x][y].draw();
    }
    }
}

在使用对象之前调用构造函数。假设您的代码有默认构造函数Block(),我使用了它。包括构造函数需要的参数。:)

写入Block[][] blocks = new Block[maxBlockX][maxBlockY]将创建一个大小为maxBlockX * maxBlockY的二维数组,其中只包含null。

新的DATA_TYPE[size1][size2]将只填充原始数据类型的默认值。因此,new int[2][1]将创建一个数组[[0],[0]],new Block[2][1]将创建一个数组[[null],[null]]。

只要正确地初始化你的block,你就会设置好。

Block[][] blocks = new Block[maxBlockX][maxBlockY];
for (int i=0; i<blocks.length; i++)
  for (int j=0; j<blocks[0].length; j++)
    blocks[i][j] = new Block();

你也可以通过在loadWorld函数中检查来避免绘制坏的(null)数据。这也可能使您的生活更轻松,不知道:

public void loadWorldAsReg() {
  for (int x = 0; x < maxBlockX; x += 20) {
    for (int y = 0; y < maxBlockY; y += 20) {
      if (blocks[x][y] != null)
        blocks[x][y].draw();
    }
  }
}

相关内容

  • 没有找到相关文章

最新更新