我需要使用ArrayLists来计算文本文件中的单词并显示其出现频率。我想从创建“ Word”对象的ArrayList开始。从那时起,我应该没有问题了。我遇到的问题是将对象添加到列表中时。我收到一条错误消息,提示“ ArrayList类型的add(Word)方法不适用于参数(字符串)”
public ArrayList<Word> wordList = new ArrayList<Word>();
String fileName, word;
int counter;
Scanner reader = null;
Scanner scanner = new Scanner(System.in);
public void analyzeText() {
System.out.print("Please indicate the file that you would like to analyze (with the path included): ");
fileName = scanner.nextLine();
try {
reader = new Scanner(new FileInputStream(fileName));
}
catch(FileNotFoundException e) {
System.out.println("The file could not be found. The program will now exit.");
System.exit(0);
}
while (reader.hasNext()) {
word = reader.next().toLowerCase();
wordList.add(word);
counter++;
}
}
public class Word {
String value;
int frequency;
public Word(String v) {
value = v;
frequency = 1;
}
}
答案 0 :(得分:2)
您需要添加一个Word对象而不是一个字符串:
word = reader.next().toLowerCase();
Word myNewWord = new Word(word); /*Generates a Word Object using your constructor*/
wordList.add(myNewWord);
counter++
希望有帮助。
答案 1 :(得分:1)
wordList
是"Word"
对象的数组。但在第17行
wordList.add(word);
您要在数组中添加另一种类型的内容(字符串)。
请注意,有一个名为"Word"
(大写)的对象类型,还有一个名为
"word"
(小写)为字符串类型。
您要在数组列表中添加字符串"word"
,但是在这种情况下,您只能在名称ArrayList
的{{1}}中添加对象“ Word”。
答案 2 :(得分:1)
您需要将Word对象添加到列表中。但是您要分配一个从扫描仪读取的字符串。您需要创建一个Word对象。
我认为,您计算字数的解决方案是错误的。您使用了错误的数据结构。 Hashmap更适合这种情况。您可以将单词指定为键,并将单词计数指定为值。