Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在字典里找出三个最常用的词_Java_Algorithm_Dictionary_Data Structures_Heap - Fatal编程技术网

Java 在字典里找出三个最常用的词

Java 在字典里找出三个最常用的词,java,algorithm,dictionary,data-structures,heap,Java,Algorithm,Dictionary,Data Structures,Heap,问题是在字典里找出三个最常用的词。我已经想出了下面的代码,但由于某种原因它不起作用(我的意思是,当我尝试在eclipse中运行它时,它直接将我引导到调试页面,尽管我在编译器屏幕上没有发现任何错误),调试后我找不到原因。你能帮我找到问题吗 线程“main”java.lang.NullPointerException位于java.util.PriorityQueue.offer的异常 (未知源代码)位于java.util.PriorityQueue.add (未知来源)在一般问题中。MostComm

问题是在字典里找出三个最常用的词。我已经想出了下面的代码,但由于某种原因它不起作用(我的意思是,当我尝试在eclipse中运行它时,它直接将我引导到调试页面,尽管我在编译器屏幕上没有发现任何错误),调试后我找不到原因。你能帮我找到问题吗

线程“main”java.lang.NullPointerException位于java.util.PriorityQueue.offer的异常
(未知源代码)位于java.util.PriorityQueue.add
(未知来源)在一般问题中。MostCommonWords.mostCommonStringFinder
(MostCommonWords.java:41)在generalquestions.MostCommonWords.main上
(MostCommonWords.java:61)

公共静态队列mostCommonStringFinder(字符串文档,int k){
if(document==null){
抛出新的IllegalArgumentException();
}
if(document.isEmpty()){
抛出新的IllegalArgumentException(“文档为空”);
}   
String[]wordHolder=document.split(“”);
HashMap=newHashMap();
for(字符串s:wordHolder){
如果(!map.containsKey){
地图.put(s,1);;
}
否则{
int值=map.get(s);
值++;
地图。放置(s,值);
}           
}
Queue minHeap=new PriorityQueue();
for(int i=0;iminHeap.peek()){
minHeap.poll();
minHeap.add(map.get(j));
}
}
返回minHeap;
}

map
是一个
HashMap
,因此键是字符串,即文本中的单词

map.get(i)
将始终返回
null
,因为映射中没有
Integer


由于您返回的是
队列
,因此我假设期望值是最大的
k
字数,因此将
Queue minHeap
等所有内容替换为:

List<Integer> counts = new ArrayList<>(map.values());
Collections.sort(counts, Collections.reverseOrder());
return counts.subList(0, k);
输出


map
是一个
HashMap
,因此键是字符串,即文本中的单词

map.get(i)
将始终返回
null
,因为映射中没有
Integer


由于您返回的是
队列
,因此我假设期望值是最大的
k
字数,因此将
Queue minHeap
等所有内容替换为:

List<Integer> counts = new ArrayList<>(map.values());
Collections.sort(counts, Collections.reverseOrder());
return counts.subList(0, k);
输出


“不起作用”不是对正在发生的事情的有用描述。请提供问题的描述,并节省我们重新学习您已经知道的内容的时间!我的意思是,当我尝试在eclipse中运行它时,它会直接引导我进入调试页面,尽管我在java.util.PriorityQueue.add(未知源)的java.util.PriorityQueue.offer(未知源)处的线程“main”java.lang.NullPointerException中没有得到任何错误在generalquestions.MostCommonWords.mostCommonStringFinder(MostCommonWords.java:41)在generalquestions.MostCommonWords.main(MostCommonWords.java:61)我相信这对于(int I=0;Imap.get(s)很好用。没问题。现在,
map.get(i)
根本不起作用。这是真的,他可能应该返回单词。。。好吧,问题解决了;)但是这张地图是什么?放(s,1);?那么op在地图上放了一个吗?是的,似乎是正确的,因为关键字(单词)不在地图上。。我不明白为什么答案很不清楚。一个小小的解释不会害死任何人@PetterFriberg我不明白你的意思,请你说清楚一点好吗?:)
map.get(s)
很好用。没问题。现在,
map.get(i)
根本不起作用。这是真的,他可能应该返回单词。。。好吧,问题解决了;)
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]