返回null的Java哈希映射
我得到的东西返回为空,一切都是设置好的,它工作到一个点 我不明白为什么我会遇到这个问题。。。请帮忙 所有内容都应该设置,但我得到的块返回为null返回null的Java哈希映射,java,2d,Java,2d,我得到的东西返回为空,一切都是设置好的,它工作到一个点 我不明白为什么我会遇到这个问题。。。请帮忙 所有内容都应该设置,但我得到的块返回为null package com.blazingkin.world; import java.util.HashMap; import java.util.Map; import com.blazingkin.atrox.AtroxAdventrum; public class World { public World(AtroxAdventru
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(x&64, y%64);
}
public int getMetadata(int x, int y){
return 1;
}
Map<Integer,Map<Integer,Chunk>> chunks;
}
您有一个这样做的检查:
if(chunks.get(x)=null){
但是你从不检查
chunks.get(x).get(y)
,如果get(y)
为null!:-O你有一个检查可以这样做:if(chunks.get(x)==null){
但是你从不检查
块。get(x)。get(y)
如果get(y)
为null!:-O显然,当你返回块。get(x)。get(y);
时,get(y)
返回null。显然,当你返回块。get(x)。get(y);
时,get(y)
返回null。这是因为我正在设置y,所以y是否为null并不重要,但是如果get(x)
不是null,但是get(y)
为null呢?那么您尝试获取的y永远不会被设置:-(你是对的,我有Epihiny并且失去了说英语的能力这是因为我设置了y,所以y是否为空并不重要,但是如果get(x)
不是空的,但是get(y)
是空的呢?那么你试图获取的y从未设置过。:(你是对的,我有Epihiny并且失去了说英语的能力。)
...
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)