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);