多阵列中的nullPointerException

时间:2013-08-12 21:54:50

标签: java arrays

我正在为我的服务器制作一个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”,它们似乎都以同样的方式工作。

4 个答案:

答案 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)

以下是如何初始化多数组的示例:

Initialize 2D array

接受答案的底部显示语法:

String[][] table = new String[5][5];