我正在为我的服务器制作一个Realm插件,我正在使用多阵列来检测用户门户的位置,下面是代码:
public static String[][][] realms;
@EventHandler
public void onPlayerInteract(final PlayerInteractEvent event) throws Exception {
if( event.getMaterial() == Material.NETHER_STAR ) {
int x = (int) event.getClickedBlock().getX();
int y = (int) event.getClickedBlock().getY();
int z = (int) event.getClickedBlock().getZ();
** realms[x][y][z] = event.getPlayer().getName();
createPortal();
}
}
我在'**'的行上找到NullPointerException
,有人可以解释一下我做错了吗?我用google搜索了“java multiarrays”,它们似乎都以同样的方式工作。
答案 0 :(得分:2)
您正在获取空指针异常,因为您尚未初始化该数组。
您可以像这样初始化数组:
String string[][][] = new String[3][3][3];
你需要知道数组的长度是多少,因为如果你试图访问或保存一个不存在索引的值,你将得到一个IndexArrayOutOfBounds
异常
答案 1 :(得分:1)
数组生命周期包含三个方面 1.数组类型声明 2.数组初始化 3.数组利用率
但你没有声明一个数组,而是你刚刚声明了一个变量并告知编译器你想要一个三维数组“领域”类型 “字符串”,但是你忘了在内存中分配该数组,并将其指针与变量相关联。 数组声明的示例
public static String[][][] realms; /// array variable declared
/*now allocate the memory and point it to the array variable*/
realms = new String [<length index>][<breath index>][<height index>]
试试这个(根据你的身份替换长度指数,呼吸指数,身高指数)
public static String[][][] realms;
@EventHandler
public void onPlayerInteract(final PlayerInteractEvent event) throws Exception {
realms = new String [<length index>][<breath index>][<height index>]
if( event.getMaterial() == Material.NETHER_STAR ) {
int x = (int) event.getClickedBlock().getX();
int y = (int) event.getClickedBlock().getY();
int z = (int) event.getClickedBlock().getZ();
** realms[x][y][z] = event.getPlayer().getName();
createPortal();
}
}
答案 2 :(得分:1)
根据您在其他答案中的评论判断,我不认为多维数组是您想要的数据结构。你建议你的指数可能是无限的(或者至少非常大)并且可能是负数,并且可能只是稀疏地填充。我认为你需要一个Octree
实现来存储你的数据。http://www.java-gaming.org/index.php?topic=27334.0有一个可用 - 我从来没有使用它,但是使用了Quadtree实现(基本上是2维相同的东西)比过去成功了。
答案 3 :(得分:0)