迭代哈希集并打印结果

时间:2013-11-12 21:49:34

标签: java printing hashset

我试图在我的Main类中的2个wordgroups上使用我的WordGroup类中的getWordSet()方法,并循环返回的hashset并打印出结果,但它甚至没有编译。我希望这个代码的尝试是在星号之间的主要课程的底部。有人可以帮帮我吗?编辑:我已经实现了如下面的代码所示的建议更改,这导致了一个新问题 - 我希望两个wordgroups进入相同的集合,但是当我尝试将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);
        }**
    }
}

WordGroup设置:

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;
    }
}

3 个答案:

答案 0 :(得分:1)

您不应在getWordSet()上使用quoteOne,因为它是String[]且它没有此类方法。您可能希望在wordgroupOne类型的WordGroup上使用它。同样适用于quoteTwo

如果可能的话,你应该更喜欢programming on interfaces而不是实际的类,所以可能会改变你的方法来返回Set而不是HashSet


  

我如何将两个结果放在同一个hashset中?我尝试将它们更改为hashSOne,它只用第二个

写了我的第一个hashset

你可能已经

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

你肯定应该更具体地说明未来帖子的错误。如果没有编译器的帮助,很难找到错误。

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

应该是

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