如何比较Integer和int



在我的代码中,我试图将Integerint作为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(,而不是因为intInteger之间的比较。

第一次通过循环时,映射为空,因此对get的调用将返回null。然后您尝试检查val(为空(是否小于maxVal。如果val为null,则立即插入1,但随后的比较并不能防止val为null。


Mapget()方法也会在未找到密钥时返回null,

  • Map(Java平台SE 8(-get

相关内容

  • 没有找到相关文章

最新更新