【问题标题】:Putting words from an array into a HashMap and a HashSet将数组中的单词放入 HashMap 和 HashSet
【发布时间】:2013-11-22 16:06:30
【问题描述】:

我正在使用 blueJ 进行编码,而我正在尝试做的是:

1.a)WordGroup 中创建一个getWordSet() 方法:

  • 将另一个WordGroup 对象作为参数
  • 创建a HashSet<String>
  • 使用两个for循环将所有单词和参数WordGroup放入HashSet
  • 返回HashSet<String>

1.b)main 方法中:

  • 使用getWordSet()方法,使用两个WordGroups
  • 迭代或循环返回的HashSet 并从中打印单词

2.a)WordGroup 中创建一个名为getWordCounts() 的方法:

  • 创建一个HashMap<String, Integer>
  • 循环遍历getWordArray()返回的所有单词,并将每个单词及其出现次数放入HashMap
  • 返回HashMap<String, Integer>

2.b)main 方法中:

  • 在两个WordGroups 上拨打getWordCounts()
  • 使用keySet() 检索键集(映射的字符串部分)
  • 循环遍历该集合并打印出WordGroups 的单词及其计数
  • 使用getWordSet() 方法将WordGroups 中的所有单词组成完整的集合
  • 循环遍历新的HashSet 以打印所有单词的完整列表,其中包含每个HashMaps 的总计数

到目前为止我的代码:

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

}    

我已经走到了这一步,现在我被困住了。我无法弄清楚如何将 teh 数组中的单词放入 hashset 和 hashmap 以及如何以所需的形式返回它们。 p.s.对奇怪的问题布局感到抱歉-如果字符串不是代码格式,则字符串在 hashset 后一直消失)

【问题讨论】:

  • 我什至不确定这段代码是否可以编译。 quoteOne 在哪里定义? getWordCounts 方法的返回值也不正确。

标签: java arrays hashmap hashset


【解决方案1】:

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

我们先来看看这个方法。

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,添加一个,然后将其放回地图中。如果没有,您可以直接在地图中添加一些东西,而无需进行任何算术运算。

另外,请注意,向任何类型的地图添加内容的方法不是add,而是put,它需要两个参数——键和值。所以在你的逻辑中,你可能会有这样一行

map.put(word, 1);

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

最后,想想你的return 声明。你想返回一个变量,而不是它的类型。你能猜出你会在那里使用哪个变量吗?

祝你顺利完成任务。我已尝试为您指明正确的方向,而无需为您做太多。

【讨论】:

  • 这对我帮助很大——非常感谢。我的代码还不能正常工作,但我只是一个初学者,你给了我很多关于我需要做什么的见解!
猜你喜欢
  • 2022-01-05
  • 2022-08-18
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 2011-02-15
  • 2017-06-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多