2

我有以下代码:

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 是空的,因为我已经检查过它是否包含一些数据。有人知道如何解决这个问题吗?谢谢。

4

3 回答 3

6

数组列表不为空,否则你会得到一个索引越界异常(这不可能在你的代码中产生,因为你的循环检查i < wallMaterialName.size())。但是,您的数组列表null在 index 处包含一个对象i

按如下方式更改代码以修复错误:

String materialName = wallMaterialName.get(i);
if(materialName != null && materialName.charAt(0) == 'A') ...
于 2012-10-29T12:30:19.807 回答
2

如果列表为空,您将不会收到错误消息。arraylist 实际上包含元素,但元素是null,这就是你最终得到NullPointerException. 如果您演示填充列表的代码,我可能会进一步帮助您。

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

for (String element : wallMaterialName) ...

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

于 2012-10-29T12:30:01.757 回答
0

你的数组列表wallMaterialName在某个索引 i 处有一个空值。知道index你有null value什么做下面的测试。

for(int i=0; i<al.size(); i++){
            if(al.get(i)==null){
                System.out.println(i);
            }
        }
于 2012-10-29T12:32:50.700 回答