将Java ArrayList与自定义对象一起使用

时间:2018-11-22 02:41:42

标签: java arraylist

我需要使用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;
    }

}

3 个答案:

答案 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更适合这种情况。您可以将单词指定为键,并将单词计数指定为值。