for (int i = 0; i < map.size(); i++) {
            if (map.get(i)/n>=0.01) {
                num++;
            }
        }

上述代码报空指针异常。为什么?

循环变量 i 取值的范围是从0到 map.size(),但是这里的 map.size() 指的是 HashMap 中键值对的数量,而不是 HashMap 中键的集合的大小。

因此,使用 map.get(i) 来访问 HashMap 中的元素是错误的,应该改为使用 map.values() 方法来访问 HashMap 中的所有值。所以应该使用如下代码

for (int value : map.values()) {
    if ((double) value / n >= 0.01) {
        num++;
    }
}

这样可以避免空指针异常。