如何比较Integer和Int?

时间:2018-08-05 05:08:09

标签: java types nullpointerexception int compare

在我的代码中,我试图将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上发帖,非常抱歉我犯了任何错误。)

2 个答案:

答案 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,

相关问题