java - 将数组中的单词放入 HashMap 和 HashSet

标签 java arrays hashmap hashset

我正在用 blueJ 编码,我想做的是:

1.a) 创建 getWordSet() WordGroup中的方法其中:

  • 再拿一个WordGroup对象作为参数
  • 创建a HashSet<String>
  • 使用两个for循环来放置此和参数WordGroup中的所有单词进入HashSet
  • 返回HashSet<String>

1.b)main 中方法:

  • 使用 getWordSet()使用两种方法 WordGroup s
  • 迭代或循环 HashSet返回并打印其中的单词

2.a)WordGroup 中创建一个方法叫getWordCounts()其中:

  • 创建 HashMap<String, Integer>
  • 循环 getWordArray() 返回的所有单词并将每个单词放入 HashMap以及发生的次数
  • 返回HashMap<String, Integer>

2.b)main 中方法:

  • 调用 getWordCounts()就两个WordGroup s
  • 使用keySet()检索键集(映射的字符串部分)
  • 循环这个集合并打印出单词及其计数 WordGroup s
  • 使用 getWordSet()制作 WordGroup 中所有单词的完整集合的方法s
  • 循环新的HashSet打印所有单词的完整列表,以及每个 HashMap 的总计数s

到目前为止我的代码:

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

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>();
        for (String words : quoteOne){
            words.add(word);
        }
        return words;
    }

    public HashMap<String, Integer> getWordCounts() {
        HashMap<String, Integer> map = new HashMap<String, Integer>();
        for (String words : words) {
            words.add(word);
        }
        return HashMap<String, Integer>;
    }

}    

我已经走到这一步了,但现在我陷入了困境。我不知道如何将数组中的单词放入哈希集和 HashMap 中,以及如何以所需的形式返回它们。附注对于奇怪的问题布局感到抱歉 - 如果不是代码格式,则字符串在哈希集之后会不断消失)

最佳答案

这里有一些基本错误,您需要先解决这些错误,然后才能继续。

我们先看一下这个方法。

public HashSet<String> getWordSet(){
    HashSet<String> set = new HashSet<String>();
    for (String words : quoteOne){
        words.add(word);
    }
    return words;
}

现在,您还没有将 quoteOne 设置为任何内容,至少在此类中还没有。您希望它是调用 getWordArray() 的返回值。所以最好包含该行

String[] quoteOne = getWordArray();

此方法中的某个位置。

接下来,您将尝试重用变量名称。您在此类中已经有了 words,因此为了避免混淆,最好为您在循环中迭代的 String 变量使用不同的名称.

现在,您尝试将字符串添加到 words 中,而实际上您想将它们添加到 set 中,因为 set 是您将从该方法返回的东西。因此,除了使用 add 更改行之外,您还需要使用 return 更改行,以使所有内容都匹配。

因此,请仔细考虑每个变量的用途,并确保正确使用每个变量。其中一些类型的错误将被编译器捕获,但这并不是草率使用变量的借口。

实际上有更短的方法可以将数组转换为HashSet,但我认为如果您尝试首先使用这种方法来使其正确,这将是一个很好的练习。

现在让我们看看下一个方法。

public HashMap<String, Integer> getWordCounts() {
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    for (String words : words) {
        words.add(word);
    }
    return HashMap<String, Integer>;
}

您的基本想法是正确的,但缺少几个关键步骤。首先,就像前面的方法一样,您需要调用 getWordArray()。但现在,你还需要迈出一步。

当您迭代循环时,您需要使用 get 方法查看 HashMap,以查看特定单词是否已记录在其中。如果是这样,您需要查看已记录的Integer,添加一个,然后将其放回 map 中。如果没有,您可以将一些内容放入 map 中,而不进行任何算术。

另外,请注意,向任何类型的 map 添加内容的方法不是 add,而是 put,并且它需要两个参数 - key 和值(value)。所以在你的逻辑中的某个时刻,你可能会有这样一行:

map.put(word, 1);

您可以在这次调用中看到键和值。

最后,考虑一下您的 return 语句。您想要返回一个变量,而不是它的类型。你能猜出你将在那里使用哪个变量吗?

祝您顺利完成作业。我试图为您指明正确的方向,但又不会为您做太多的事情。

关于java - 将数组中的单词放入 HashMap 和 HashSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19896467/

相关文章:

java - Java String hashCode是如何计算对象的

java - Java下播放*.caf文件(iOS/Apple)

java - 由于所需的依赖项,我的模块正在阻止我的 Wowza 应用程序加载

c++ - char var[] 和 char var[][] 之间的区别

java - 使用 if-condition 还是 HashMap?

java - 迭代时从 HashSet 中删除元素

java - 如何在 Struts 2 jQuery 中访问嵌套的 JSON 响应 <sj :select> tag

java - 能够使用sheet api链接google电子表格中的两个电子表格

c++ - 使用 clEnqueueWriteBuffer 的内存损坏 - OpenCL

java - 如何将字节的json数组转换为位图