【问题标题】:Java - Adding Elements to Array of Hashmaps Produces Null Error [duplicate]Java-向哈希图数组添加元素会产生空错误[重复]
【发布时间】:2017-08-15 15:04:26
【问题描述】:

我正在尝试创建一个二维哈希图数组。我使用以下代码执行此操作:

   @SuppressWarnings("unchecked")
    Map<String, Boolean>[][] arrayBlock3 = (Map <String, Boolean>[][]) new Map[6][6];

但是,当我尝试向数组添加元素时,在运行时,在向数组添加元素的第一行会出现空指针异常。

添加元素的代码是:

    arrayBlock3[0][0].put("B", false);
    arrayBlock3[0][1].put("G", false);
    arrayBlock3[0][2].put("B", false);
    arrayBlock3[0][3].put("B", false);
    arrayBlock3[0][4].put("G", false);
    arrayBlock3[0][5].put("B", false); 

错误信息

Exception in thread "main" java.lang.NullPointerException
at main.main(main.java:20)

非常感谢您的帮助,谢谢。

【问题讨论】:

  • 什么是Map?..
  • 提示:你认为arrayBlock3[0][0] 的价值是什么,为什么?
  • @JonSkeet 我正在尝试为arrayBlock3[0][0] 赋值,这样做会引发空指针异常,但我不确定原因。
  • 不,您没有尝试为该数组元素分配值。您正在获取该数组元素的值并在其上调用方法。数组元素的值为null。
  • 使用数组时一个好的经验法则是必须分配数组(通常类似于 new a[4])并且必须分配数组中的每个元素(例如 new ArrayList( ))。

标签: java arrays generics hashmap


【解决方案1】:

您需要初始化Map的那个矩阵中的每个元素(并且您需要使用实现Map的类,例如HashMap):

for (int i = 0; i < arrayBlock3.length; i++) {
    for (int j = 0; j < arrayBlock3[i].length; j++) {
        arrayBlock3[i][j] = new HashMap<>();
    }
}

【讨论】:

  • 谢谢@YCF_L!不知为何,忘记了那些哈哈
猜你喜欢
  • 2013-12-21
  • 1970-01-01
  • 2015-04-30
  • 2015-08-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-01-07
  • 2012-09-03
相关资源
最近更新 更多