问题是在字典中找到三个最常用的单词。我已经提出了下面的代码,但由于某种原因它不起作用(我的意思是当我尝试在eclipse中运行它时,它直接导致我调试页面,虽然我没有在编译器屏幕上得到任何错误),我调试后找不到原因。你能帮我找到问题吗?
java.util.PriorityQueue.offer中线程“main”java.lang.NullPointerException中的异常
(java.util.PriorityQueue.add上的(未知来源)
(未知来源)at generalquestions.MostCommonWords.mostCommonStringFinder
(MostCommonWords.java:41)在generalquestions.MostCommonWords.main
(MostCommonWords.java:61)
if [ $(($BUILD_NUMBER % 2)) -eq 0 ]
then
echo "run project"
else
echo "run tests"
fi
答案 0 :(得分:5)
map
是HashMap<String, Integer>
,因此键是字符串,即文字中的单词。
map.get(i)
将始终返回null
,因为地图中没有Integer
个键。
由于您返回的是Queue<Integer>
,我假设期望值是k
个字数最多的,因此请将Queue<Integer> minHeap
以及之后的所有内容替换为:
List<Integer> counts = new ArrayList<>(map.values());
Collections.sort(counts, Collections.reverseOrder());
return counts.subList(0, k);
并将返回类型更改为List<Integer>
。
测试
String text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod " +
"tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, " +
"quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo " +
"consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse " +
"cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat " +
"non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.";
System.out.println(mostCommonStringFinder(text, 3));
输出
[3, 2, 2]