我有以下代码:
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是空的,因为我检查它包含一些数据。谁知道如何解决这个问题?感谢。
答案 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);
}
}