0

我正在尝试在我的 Main 类中的 2 个词组上使用我的 WordGroup 类中的 getWordSet() 方法,并遍历返回的哈希集并打印出结果,但它甚至没有编译。我对我希望能做到的代码的尝试位于星号之间的主类的底部。有人可以帮我吗?编辑:我已经实施了建议的更改,如下面的代码所示,这导致了一个新问题-我希望两个词组进入同一个集合,但是当我尝试将 hashSTwo 更改为 hashSOne 以尝试将所有单词放入hashSOne 它不会编译。

import java.util.HashSet;
import java.util.HashMap;

public class Main{

    public static void main(String[] args){
        WordGroup wordgroupOne= new WordGroup ("You can discover more about a person in an hour of play than in a year of conversation");
        WordGroup wordgroupTwo= new WordGroup ( "When you play play hard when you work dont play at all");

        String[] quoteOne = wordgroupOne.getWordArray();   
        String[] quoteTwo = wordgroupTwo.getWordArray();

        for (String words : quoteOne){
            System.out.println(words);
        }

        for (String words : quoteTwo){                       
            System.out.println(words);
        }

        **HashSet<String> hashSOne = wordgroupOne.getWordSet();
        HashSet<String> hashSTwo = wordgroupTwo.getWordSet();

        for (String set : hashSOne){
            System.out.println(set);
        }

        for (String set : hashSTwo){
            System.out.println(set);
        }**
    }
}

词组集:

import java.util.HashSet;
import java.util.HashMap;

public class WordGroup {  
    public String words;

    public WordGroup (String getWords){
        words = getWords.toLowerCase();
    }

    public String[] getWordArray(){
        return words.split(" ");   
    }

    public HashSet<String> getWordSet(){
        HashSet<String> set = new HashSet<String>();
        String[] p = getWordArray();
        for (String items : p){
            set.add(items);
        }
        System.out.println(set);
        return set;
    }

    public HashMap<String, Integer> getWordCounts() {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        String[] q = getWordArray();
        for (String stuff : q) {
            Integer oldVal = map.get(stuff);
            if (oldVal == null){
                oldVal = 0;
            }
            map.put(stuff, oldVal+1);
        }
        System.out.println(map);
        return map;
    }
}
4

3 回答 3

1

你不应该使用getWordSet()onquoteOne因为它是String[]并且它没有这样的方法。您可能想在类型上使用wordgroupOneWordGroup。也一样quoteTwo

此外,如果可能的话,您应该更喜欢在接口上编程而不是实际类,因此可能会将您的方法更改为 returnSet而不是HashSet.


我将如何将两个结果放在同一个哈希集中?我尝试将它们都更改为 hashSOne 并且它只是用第二个覆盖了我的第一个哈希集

你可能做过

hashSOne = hashSTwo;

这只是hashSOne从参考中设置参考使用hashSTwo

如果您想创建包含两个集合中所有项目的新集合,您可以这样做

//lets create Set with elements from first set
Set<String> allElements = new HashSet<>(hashSOne);

//now lets add all elements from second set 
allElements.addAll(hashSTwo);//this will not add duplicates
于 2013-11-12T21:55:02.310 回答
0

也许从查看 getWordArray() 方法开始。我怀疑你的正则表达式有点躲闪。有关空格拆分正则表达式,请参阅此SO链接。

于 2013-11-12T21:54:05.923 回答
0

对于以后的帖子,您绝对应该更具体地说明错误是什么。如果没有编译器的帮助,很难找到错误所在。

HashSet<String> hashSOne = quoteOne.getWordSet();
HashSet<String> hashSTwo = quoteTwo.getWordSet();

应该

HashSet<String> hashSOne = wordgroupOne.getWordSet();
HashSet<String> hashSTwo = wordgroupTwo.getWordSet();
于 2013-11-12T21:55:35.777 回答