设置对象数组值时出错

时间:2013-09-05 00:37:29

标签: java

package net.gfx;

public class TileSet {

    public final int TILES = 627;

    class Tiles {
        int x = 0, y = 0;
        int w = 0, h = 0;

    }

    public Tiles tiles[] = new Tiles[TILES];

    public TileSet() {
        for (int i = 0, y = 0; i < TILES; i++) {
            for (int x = 0; x < 1280; x =+ 25) {
                if (x > 1280) {
                    x = 0;
                    y += 40;

                }
                else {
                    tiles[i].x = x; //ERROR CAUSED HERE
                    tiles[i].y = y; //TO HERE *Unknown reason*
                    tiles[i].w = 40;
                    tiles[i].h = 40;

                }

            }

        }

    }

}

错误我得到:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at net.jump.Jump.<clinit>(Jump.java:8)
Caused by: java.lang.NullPointerException
    at net.gfx.TileSet.<init>(TileSet.java:24)
    at net.gfx.Graphics.<clinit>(Graphics.java:10)
    ... 1 more

我要做的是基本上在屏幕上创建一个瓷砖阵列。除了设置对象数组值之外,其他所有工作都可以。

我几乎到处都搜索过,但没有找到任何东西。我打赌它可能是我错过了一些简单的事情。

2 个答案:

答案 0 :(得分:2)

您必须先创建Tiles的实例,然后才能对其执行任何操作。

 for (int i = 0, y = 0; i < TILES; i++) {
    for (int x = 0; x < 1280; x =+ 25) {
        if (x > 1280) {
            x = 0;
            y += 40;

        }
        else {
            tiles[i] = new Tiles(); //instance created here.
            tiles[i].x = x; 
            tiles[i].y = y; 
            tiles[i].w = 40;
            tiles[i].h = 40;

        }

    }

}

答案 1 :(得分:1)

您没有初始化数组中的每个Tiles,因为默认值为null

也许你应该尝试初始化每个Tiles

for(int i = 0; i < tiles.length; i++){
    tiles[i] = new Tiles();
}

之后,您可以对数组中的每个Tiles元素执行操作。