在我的代码中,我试图将Integer
和int
作为if
语句的条件进行比较,但它返回了NullPointerException
错误。我已经找到了两者相等的答案,但不大于/小于。
这是我到目前为止的代码:(相关行是if (val > maxVal)
(
import java.util.*;
import java.io.*;
class Untitled {
public static void main(String[] args) throws FileNotFoundException
{
Scanner sc = new Scanner(System.in);
System.out.print("Please enter filename: ");
Scanner inFile = new Scanner(new File(sc.nextLine()));
int maxVal = 0;
String maxKey = null;
TreeMap<String,Integer> tmap = new TreeMap<String,Integer>();
while (inFile.hasNextLine())
{
String key = inFile.nextLine();
Integer val = tmap.get(key);
tmap.put(key, (val==null) ? 1 : val+1);
if (val > maxVal) {
maxVal = val;
maxKey = key;
}
}
inFile.close();
System.out.println(maxKey+" "+maxVal);
}
}
谢谢!(我目前正在学习Java,这是我第一次在Overflow上发帖,很抱歉我犯了任何错误(。
我看到的最简单的解决方案是将三进制转换为val
的赋值(您还可以使用int
(。此外,我更喜欢Map.getOrDefault(Object, V)
。比如
int val = 1 + tmap.getOrDefault(key, 0);
tmap.put(key, val);
if (val > maxVal) {
maxVal = val;
maxKey = key;
}
否则,你可以在比较中重复三元(但我个人认为这很难看,所以我将把它留给读者一个完全可选的练习(。
它会给您一个NullPointerException
,因为您正在比较的值为null(您从映射中获得的值为null(,而不是因为int
和Integer
之间的比较。
第一次通过循环时,映射为空,因此对get的调用将返回null。然后您尝试检查val
(为空(是否小于maxVal
。如果val
为null,则立即插入1,但随后的比较并不能防止val
为null。
Mapget()
方法也会在未找到密钥时返回null,
- Map(Java平台SE 8(-get