我正在用 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/