当前位置: 首页 > 知识库问答 >
问题:

如何使用增强的for循环遍历另一个方法中的哈希集?

高运诚
2023-03-14

对于我的任务,我被要求提供以下内容:

  • 创建哈希映射

我已经在另一个名为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;
}

我不确定是否正确,但有多个错误?


共有2个答案

宰父才
2023-03-14

首先: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);
            }
        }
    }
}
丁翊歌
2023-03-14

首先,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)——我想是这样的——在列表上使用迭代器有什么好处吗。这是简单的迭代--没有回头路 蒂亚