在我的代码中,我试图将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上发帖,非常抱歉我犯了任何错误。)
答案 0 :(得分:2)
我看到的最简单的解决方案是将您的三元数交换为val
的分配(并且您最好使用int
)。另外,我会首选 Map.getOrDefault(Object, V)
。喜欢,
int val = 1 + tmap.getOrDefault(key, 0);
tmap.put(key, val);
if (val > maxVal) {
maxVal = val;
maxKey = key;
}
否则,您可以在比较中重复(但我个人认为这很丑陋,因此我将其作为对读者完全可选的练习)。
答案 1 :(得分:0)
之所以给您NullPointerException
,是因为您要比较的值为空(从地图中获取的值为空),而不是因为int
和{{1}之间的比较}。
第一次通过循环,地图为空,因此对get的调用将返回null。然后,您尝试检查Integer
(为空)是否小于val
。如果maxVal
为空,则立即插入1,但随后的比较不能防止val
为空。
如果找不到键,则Map val
方法也返回null,