Java 双重抛出NullPointerException,但它不是null

Java 双重抛出NullPointerException,但它不是null,java,nullpointerexception,double,Java,Nullpointerexception,Double,我不明白这里发生了什么。基本上,我的代码如下所示: Double average = 0.; for(Map<String, Double> map : model.getMaps()){ average += map.get(key); // this line throws a NullPointerException } average /= model.getMaps().size(); 非常奇怪的是,我检查了所有不为null的内容,但它仍然抛出一个NPE。要么是映

我不明白这里发生了什么。基本上,我的代码如下所示:

Double average = 0.;
for(Map<String, Double> map : model.getMaps()){
    average += map.get(key); // this line throws a NullPointerException
}
average /= model.getMaps().size();

非常奇怪的是,我检查了所有不为null的内容,但它仍然抛出一个NPE。

要么是
映射
,要么是检索到的值为null(映射中不存在键)


map
为null或
map.get(key)
返回null。请在调试问题中包含一个和一个堆栈跟踪。@khelwood他们说
map.get(key)
捕获异常时打印一个数字。但是,是的,需要一个MVC。顺便说一句:将
average
声明为
double
(而不是
double
),以避免重复的拆箱/装箱。同样,不用调试,我们所能做的就是猜测,这不是解决问题的非常有效的方法。请慢慢来,花点时间创建这样的示例,可能在这样做的同时,您会发现问题的原因,因此我认为这是值得做的。另一种可能性是,在您的真实代码中,
平均值
为空,尽管这在您发布的代码中是不可能的。
Double average = 0.;
for(Map<String, Double> map : model.getMaps()){
    try{
        average += map.get(key); // this line throws a NullPointerException
    } catch(NullPointerException e){
        e.printStackTrace();
        System.out.println(map.get(key).toString());
    }
}
average /= model.getMaps().size();
if(map==null) System.out.println("Map null");
else {
    if (map.get(key).toString() == null) {
         System.out.println(key + " null");
    } else {
        String newValS = map.get(key).toString(); //throws a NPE
    }
}
double sum = 0.0;
int count = 0;
for (Map<String, Double> map : model.getMaps()) {
    if (map != null) {
        Double value = map.get(key);
        if (value != null) {
            sum += value;
            ++count;
        }
    }
}
double average = count == 0 ? 0.0 : sum / count;
double average = model.getMaps().stream()
    .filter(Objects::nonNull)
    .map(m -> m.get(key))
    .filter(Objects::nonNull)
    .mapToDouble()
    .average().orElse(0.0);