0

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

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

  • 将另一个WordGroup对象作为参数
  • 创建a HashSet<String>
  • 使用两个 for 循环将 this 中的所有单词和参数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方法中:

  • 打电话getWordCounts()给两个WordGroups
  • 用于keySet()检索键集(映射的字符串部分)
  • WordGroup循环这个集合并打印出两个s的单词及其计数
  • 使用该getWordSet()方法将两个WordGroups中的所有单词组成完整的集合
  • 循环 new以打印所有单词的完整列表,其中包含每个sHashSet的总计数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);
        }
    }
}

词组类:

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 以及如何以所需的形式返回它们。ps 对奇怪的问题布局感到抱歉 - 如果它不是代码格式,则字符串在 hashset 之后一直消失)

4

1 回答 1

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,以使所有内容都匹配。

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

实际上有更短的方法可以将数组转换为 a 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(). 但是现在,您需要再迈出一步。

当您遍历循环时,您需要HashMap使用该get方法查看 ,以查看是否已在其中记录了特定单词。如果是这样,您需要查看Integer针对它记录的内容,添加一个,然后将其放回地图中。如果没有,您可以在不做任何算术的情况下将一些东西放入地图中。

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

map.put(word, 1);

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

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

祝你完成任务好运。我已经尝试为您指出正确的方向,而无需为您做太多。

于 2013-11-11T05:40:28.630 回答