ArrayList上的java.lang.NullPointerException

时间:2012-10-29 12:28:19

标签: java arraylist

我有以下代码:

for (int i=0; i<wallMaterialName.size(); i++){
if (Math.abs(calculatedWallUValue - alternativeWallUValue) > 0.01){
   if(wallMaterialName.get(i).charAt(0) == 'A'){                   //*****ERROR IN HERE*****
      PreparedStatement prepStateMat = con.prepareStatement("select * from concretestonefloor where value<? order by value desc limit 1");
      prepStateMat.setFloat(1, (Float)wallMaterialLambda.get(i));
      ResultSet rsMaterial = prepStateMat.executeQuery();
      //...
      }
  //...
  }
}

当我运行代码时,会出现“java.lang.NullPointerException”。 错误来自此代码:

if(wallMaterialName.get(i).charAt(0) == 'A')

我不知道为什么arraylist是空的,因为我检查它包含一些数据。谁知道如何解决这个问题?感谢。

3 个答案:

答案 0 :(得分:6)

数组列表不为空,否则您将获得索引超出范围的异常(在代码中无法生成,因为您的循环检查i < wallMaterialName.size())。但是,您的数组列表包含索引为null的{​​{1}}对象。

按如下所示更改代码以修复错误:

i

答案 1 :(得分:2)

如果列表为空,则不会收到错误。 arraylist实际上包含元素,但元素是null,这就是你最终得到NullPointerException的方式。如果您演示了填充列表的代码,我可以帮助您。

另请注意:不要通过索引遍历列表:使用增强的语法:

for (String element : wallMaterialName) ...

这至少可以消除您对迭代不存在的元素的担忧。对两个并行列表使用相同索引的方式表明,您的设计也有可能在这方面得到改进。您应该有一个自定义对象列表,其中包含第一个列表中的字符串和第二个列表中的浮点数。

答案 2 :(得分:0)

你的arraylist wallMaterialName在某个索引i处有一个空值。 要了解您index null value进行以下测试。

for(int i=0; i<al.size(); i++){
            if(al.get(i)==null){
                System.out.println(i);
            }
        }