找到字典中最常见的三个单词

时间:2015-10-09 21:20:30

标签: java algorithm dictionary data-structures heap

问题是在字典中找到三个最常用的单词。我已经提出了下面的代码,但由于某种原因它不起作用(我的意思是当我尝试在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

1 个答案:

答案 0 :(得分:5)

mapHashMap<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]