Java HashMap возвращает значение null

#java #2d

#java #2d

Вопрос:

Я получаю данные, возвращаемые как null, все всегда установлено, и это работает до определенного момента…

Я не понимаю, почему я получаю эту проблему… пожалуйста, помогите,

Все должно быть установлено, но я получаю фрагмент, возвращаемый как null

 package com.blazingkin.world;
import java.util.HashMap;
import java.util.Map;

import com.blazingkin.atrox.AtroxAdventrum;

public class World {

    public World(AtroxAdventrum aa){
        chunks = new HashMap<Integer,Map<Integer,Chunk>>();
    }



    public void setBlock(int x, int y, int newBlock){

    }

    public void setMetadata(int x, int y, int newMeta){

    }

    private void setChunk(int x, int y, Chunk c) {
        if(chunks.get(x) == null) {
            chunks.put(x, new HashMap<Integer, Chunk>());
            System.out.println("Created new chunk "  x);
        }
        chunks.get(x).put(y, c);
        System.out.println("Set Chunk: " x ", " y);
    }
    private Chunk getChunk(int x, int y) {
        if(chunks.get(x) == null){
        Chunk c = new Chunk(y*64, x, y);
        setChunk(x, y, c);
        return c;
        }
        return chunks.get(x).get(y);
    }


    public int getChunkX(int x){
        return x/64 - x%64;
    }
    public int getChunkY(int y){
        return y/64 - y%64;
    }

    public int getBlock(int x, int y){
        return getChunk(getChunkX(x), getChunkY(y)).getBlock(xamp;64, y%64);
    }

    public int getMetadata(int x, int y){
        return 1;
    }



    Map<Integer,Map<Integer,Chunk>> chunks;

}
  

Сообщение об ошибке:

 ...

Created new chunk -23

Set Chunk: -23, 16


Exception in thread "main" java.lang.NullPointerException
    at com.blazingkin.world.World.getBlock(World.java:49)
    at com.blazingkin.render.ScreenOutput.render(ScreenOutput.java:30)
    at com.blazingkin.atrox.AtroxAdventrum.draw(AtroxAdventrum.java:34)
    at com.blazingkin.atrox.Core.gameLoop(Core.java:60)
    at com.blazingkin.atrox.Core.run(Core.java:27)
    at com.blazingkin.atrox.AtroxAdventrum.main(AtroxAdventrum.java:14)
  

Комментарии:

1. Очевидно, что когда вы это делаете return chunks.get(x).get(y); , get(y) возвращается нуль.

Ответ №1:

У вас есть проверка, которая делает это: if(chunks.get(x) == null){

Но вы никогда не проверяете, chunks.get(x).get(y) и get(y) равно ли это нулю! :-O

Комментарии:

1. Это потому, что я устанавливаю y, поэтому не имеет значения, имеет ли значение y значение null

2. Но что, если get(x) значение не равно null, а get(y) равно null? Тогда y, который вы пытаетесь получить, никогда не устанавливается. 🙁

3. вы правы, у меня было прозрение, и я потерял способность говорить на английском