ArrayList以某种方式清除,我不知道为什么

时间:2016-05-07 05:30:45

标签: java arraylist hashmap

我正在为我的游戏开发世界一代,并且有多个世界,我存储了一个散列图,其中键作为行星&一个arraylist存储每个行星的瓷砖。它似乎正在清除或不在hashmap中设置arraylist。我决定在这里发布,因为更多的眼睛一定会有所帮助。我正在使用slick2d,因此继承了处理进入和离开地球的代码。

WorldGenerator world = new WorldGenerator(25, p);
public static int worldType = 0;
public Planet planet;

HashMap<Planet, ArrayList<Tile>> worlds = new HashMap<>();

@Override
    public void enter(GameContainer container, StateBasedGame game) {

        System.out.println("Worlds: " + worlds.size());
        if (worlds.containsKey(planet)) {
            System.out.println("Contains key");
            worlds.get(planet).size();
            if (worlds.get(planet).isEmpty()) {

                System.out.println("ArrayList Empty");
                world.generate(worldType);
                worlds.put(planet, world.tiles);

            } else {
                System.out.println("ArrayList has tiles");
                world.tiles = worlds.get(planet);
            }

        } else {
            System.out.println("No key found");
            world.generate(worldType);
            worlds.put(planet, world.tiles);

        }

    }

    @Override
    public void leave(GameContainer container, StateBasedGame game) {
        worlds.replace(planet, world.tiles); // adds changes the player makes ( block breaks, etc )
        world.clear();

    }

编辑:

public class WorldGenerator {

    float size, height = 40;
    Player player;
    public boolean isDone;

    ArrayList<Tile> tiles = new ArrayList<>();



    public void generate(int type) {
        isDone = false;
        for (int i = 0; i < height; i++) {
            for (int j = 0; j < size; j++) {
                if (i > 15) {

                    Random r = new Random();
                    int rnd = 1 + r.nextInt((10 - 1) + 1);

                    if (rnd >= 8 && r.nextBoolean()) {
                        tiles.add(new TileIronOre(j * 32, i * 32));
                    } else {
                        tiles.add(new TileStone(j * 32, i * 32));
                    }

                } else if (i > 11) {
                    tiles.add(new TileDirt(j * 32, i * 32));

                } else if (i == 11) {
                    tiles.add(new TileGrass(j * 32, i * 32));
                } else {

                }
            }
        }

        System.out.println(tiles.size() + " tiles");
        isDone = true;
    }

    public void clear() {
        tiles.clear();
    }

1 个答案:

答案 0 :(得分:2)

我认为问题可能是你的Planet对象没有实现hashCode和equals方法。 对于HashMap来说,重要的是能够识别你传递的星球与使用的密钥相同。

希望它有所帮助。