对于我的任务,我被要求提供以下内容:
哈希映射
我已经在另一个名为
getWordArray()
的方法中创建了一个哈希集,但我正在努力找出如何使for循环在getWordSet()
方法中迭代,而不会出现错误“非静态的
方法无法从静态上下文引用”。当我使用string返回我创建的哈希集时,我得到了错误“不兼容类型:
HashMap
以下是代码:
字组类
import java.util.HashSet;
import java.util.Set;
import java.util.HashMap;
public class WordGroup {
String word;
//Creates constructor which stores a string value in variable "word" and converts this into lower case using the lower case method.
public WordGroup(String aString) {
this.word = aString.toLowerCase();
}
public String[] getWordArray() {
String[] wordArray = word.split("-");
return wordArray;
}
public Set<String> getWordSet(WordGroup secondWordGroup) {
HashSet<String> newHashSet = new HashSet<>();
for (String word : secondWordGroup.getWordArray())
newHashSet.add(word);
for (String word : this.getWordArray())
newHashSet.add(word);
System.out.println(newHashSet);
return newHashSet;
}
public String getWordCounts()
{
HashMap<String, Integer> myHashMap=new HashMap<String, Integer>();
int loopcounter = 0;
for (WordGroup it : WordGroup.getWordArray())
loopcounter = loopcounter +1;
myHashMap.add(it);
return myHashMap;
}
}
主课
public class Main{
public static void main (String[] args) {
WordGroup firstWordGroup = new WordGroup("You-can-discover-more-about-a-person-in-an-hour-of-plau-tban-in-a-year-of-conversation");
WordGroup secondWordGroup = new WordGroup ("When-you-play-play-hard-when-you-work-dont-play-at-all");
}
我有两个主要问题:
如何正确迭代getWordArray方法?
- 如何返回数据类型的HashMap,而不是字符串?
我看不到在我的WordGroup类中使用任何静态方法,所以显然我对静态有一些误解,我理解第二个错误,只是不太确定如何修复它。
提前谢谢。
编辑:我尝试使用这个if语句:
public Set<String> getWordCounts(WordGroup secondWordGroup)
{
HashMap<String,Integer> myMap;
if (myMap.keySet().contains(getWordArray[i]))
{
myMap.get(getWordArray[i]) +1;
}
else
{
myMap.put(getWordArray[i],1);
}
return myMap;
}
我不确定是否正确,但有多个错误?
首先:HashSet中不能有重复的值。假设HashSet中已经有单词“hello”。然后add('hello')什么都不做。HashSet仍然只有一个单词“hello”。如果你需要有多个“hello”,可以使用ArrayList。
第二,你在哪里找到HashMap的。add()方法?它不在那里。
第三:你是否删减了一些代码?
for (WordGroup it : WordGroup.getWordArray())
loopcounter = loopcounter +1;
for loop只做loopcounter=loopcounter 1;
没别的了。
这样做:HasMap的关键字为单词,值为出现次数,即。
HasMap<String,Integer> myMap
然后当你浏览你的wordArray时(你不需要其他任何东西)
如果myMap有一个关键字数组[i],则在映射中增加与之关联的值:
myMap.put(wordArray[i],myMap.get(wordArray[i]) +1)
否则就换新元素
myMap.put(wordArray[i],1)
我希望你能自己写一些其他的东西。
编辑:
public class WordGroup {
String word;
// Creates constructor which stores a string value in variable "word" and converts this into lower case using
// the lower case method.
public WordGroup(String aString) {
this.word = aString.toLowerCase();
}
public String[] getWordArray() {
String[] wordArray = word.split("-");
return wordArray;
}
public HashMap<String, Integer> getWordCountsMap() {
HashMap<String, Integer> myHashMap = new HashMap<String, Integer>();
for (String nextWord: this.getWordArray()) {
if (myHashMap.keySet().contains(nextWord)) {
myHashMap.put(nextWord, myHashMap.get(nextWord) + 1);
} else {
myHashMap.put(nextWord, 1);
}
}
return myHashMap;
}
}
最好不要每次都创建HashMap,而是在构造函数中创建一次。
public class WordGroup {
String word;
HashMap<String, Integer> myHashMap = new HashMap<String, Integer>();
// Creates constructor which stores a string value in variable "word" and converts this into lower case using
// the lower case method.
public WordGroup(String aString) {
this.word = aString.toLowerCase();
this.createWordCountsMap();
}
public String[] getWordArray() {
String[] wordArray = word.split("-");
return wordArray;
}
public HashMap<String, Integer> getWordCountsMap()
{
return this.myHashMap;
}
private void createWordCountsMap() {
for (String nextWord : this.getWordArray()) {
if (this.myHashMap.keySet().contains(nextWord)) {
this.myHashMap.put(nextWord, this.myHashMap.get(nextWord) + 1);
} else {
this.myHashMap.put(nextWord, 1);
}
}
}
}
首先,getWordCounts()中的forhtml" target="_blank">循环实际上什么都不做。你必须用这样的花括号来包围你的代码
for ( /* single element of structure */ : /* structure on which you iterate */) {
// what you want to do with this single element
}
您收到的第一个错误是关于这部分代码的:
WordGroup.getWordArray()
您试图从类WordGroup调用静态方法,而不是为给定的类实例调用非静态方法。您想要实现的只是getWordArray()。
另一个错误是变量it的类型。getWordArray()返回String[],所以这个结构中的单个元素将是String,现在是WordGroup。
您还应该熟悉HashMap方法,并注意此结构需要键和值。在您的示例中,String是键,整数是值。
回答您关于打印HashMap的第二个问题,您可以使用它的toString方法将HashMap对象转换为String,然后您可以轻松地打印它。
本文向大家介绍Java中使用增强for循环的实例方法,包括了Java中使用增强for循环的实例方法的使用技巧和注意事项,需要的朋友参考一下 增强型for循环在遍历一个数组的时候会更加快捷 步骤 : 增强型for循环 注:增强型for循环只能用来取值,却不能用来修改数组里的值 练习: 最大值 (用增强型for循环找出最大的那个数) 答案: 以上就是关于Java中使用增强for循环的实例方法,感谢大
问题内容: 我正在从Java切换到C ,并且想知道C 是否包含我在Java中使用的增强的for循环,例如: 在C ++中是否可能有相同的“快捷方式”? 问题答案: 在C ++ 11中,如果编译器支持,则可以。这称为基于范围的。 它适用于C样式数组以及具有函数并返回迭代器的任何类型。例:
本文向大家介绍java增强for循环的实现方法,包括了java增强for循环的实现方法的使用技巧和注意事项,需要的朋友参考一下 如下所示: Map并没有实现Iterable接口,所以你不能直接使用增强for来遍历它! 以上就是小编为大家带来的java增强for循环的实现方法的全部内容了,希望对大家有所帮助,多多支持呐喊教程~
我正在MST上的CLRS中尝试ch23,这里有一个问题: 给定一个图G和一个最小生成树T,假设我们减少不在T中的一条边的权重。给出了在修改图中求最小生成树的算法。 我找到的一个解决方案是在中添加此新更改的边,然后在T中创建一个简单的循环,遍历此循环并删除此循环中的最大权重边,瞧,找到了新更新的MST! 我的问题是,如何在这个简单循环中只遍历节点?因为如果我在中从这个新添加的边的一个endpoint
本文向大家介绍jQuery使用each遍历循环的方法,包括了jQuery使用each遍历循环的方法的使用技巧和注意事项,需要的朋友参考一下 1、选择器+遍历 2、选择器+遍历 3、更适用的遍历方法 1)先获取某个集合对象 2)遍历集合对象的每一个元素 下面看下jQuery 遍历 - each() 方法 总结 以上所述是小编给大家介绍的jQuery使用each遍历循环的方法,希望对大家有所帮助,如果
我正在逐个迭代字符串对象列表中的元素: 在这里,每次我调用list上的get()时,列表都会从其一端一直迭代到第i个元素——因此上面循环的复杂性是O(n^2)。 是a.)对于增强型for循环,与上面相同,还是b.)对于循环,将指针保持在最后一个指针所在的位置,因此下面循环的复杂性是O(n)? 如果上面的情况(b)——我想是这样的——在列表上使用迭代器有什么好处吗。这是简单的迭代--没有回头路 蒂亚