import java.io.*;
import java.util.Scanner;
import java.util.*;
public class PrintWordCounts {
public static void main(String[] args) {
AVLTree<Word> tree = new AVLTree<Word>();
try {
Scanner reader = new Scanner(new File("AboutJUC.txt"));
reader.useDelimiter("[\\p{Punct}\\s]+");
while (reader.hasNextLine()){
String s = reader.nextLine();
String[] words = s.split("\\s");
int countLine;
Word target = new Word(reader.next());
Word result = tree.search(target);
if ( result != null )
result.count++;
else
tree.insert(target);
}
reader.close();
} catch (IOException ex) {
System.out.println("File Error");
}
tree.inorder();
}
}
这是我使用
的Word课程import java.util.LinkedList;
public class Word implements Comparable<Word> {
public String word;
public int count;
private LinkedList<Integer> lines = new LinkedList<Integer>();
public int lineCount;
public Word(String w) {
word = w;
count = 1;
lineCount = 1;
}
public boolean equals(Object obj) {
Word other = (Word) obj;
return word.equals(other.word);
}
public int compareTo(Word obj) {
int comparedValue = word.compareTo(obj.word);
while(comparedValue == 0){
System.out.print(lineCount);
lineCount++;
}
return word.compareTo(obj.word);
}
public String toString() {
return word+"\t"+count + "\t" + "[" + lineCount + "]";
}
}
答案 0 :(得分:0)
首先在compareTo中摆脱无限循环。您需要在解决方案中使用2个循环,一个用于行,而嵌套用于一行中的单词。字典比树更合适。在外部循环中创建字典以计算当您离开内部循环时迭代字典中的一行中的单词数,并为该字典中的单词更新一行中的使用次数。它应该是足够的信息来完成我猜的任务。
答案 1 :(得分:0)
第1步:添加行号计数器。我们称之为lineNum
。在逐行读取的循环之外初始化它。读取一行后,增加其值。
第2步:在Word
中添加方法以添加行号,我们称之为addLineNum
。在第一次向树中添加单词时,将此方法与lineNum
一起使用,并在更新现有单词时使用以下内容:
if (result != null) {
result.addLineNum(lineNum);
} else {
target.addLineNum(lineNum);
tree.insert(target);
}
第3步:因为每行有多个单词,你甚至创建了words
,
你将需要一个嵌套循环来找到这些单词。
步骤4:注意添加行号和匹配的单词计数。可以有比匹配的行更多的单词。