-1

我的 hashmap 类如下:

public HashMap<String, Integer> getWordCounts() {
    HashMap<String, Integer> map = new HashMap<String, Integer>();
    String[] quoteOne = getWordArray();
    for (String stuff : quoteOne) {
        map.put(stuff, +1);
    }
    return map;
}

当它通过quoteOne时,我希望它将数组中的每个单词放入哈希图中,但对于重复项将1添加到整数。例如“如果你看到这个你很酷”将被放入哈希图中

if  1
you 2
see 1
this 1
are 1
cool 1

但是我的代码与您一起将其放入哈希图中 1. 出了什么问题?

4

4 回答 4

2

在您的代码中,对于您看到的每个单词,您输入 +1(正 1 的 int 值)。

您需要更新该值,而不是覆盖它。

for (String stuff : quoteOne) {
    Integer oldVal = map.get(stuff);
    if (oldVal == null) {
        oldVal = 0;
    }
    map.put(stuff, oldVal+1);
}
于 2013-11-11T12:13:28.697 回答
1

你的 for 循环将是

 for (String stuff : quoteOne) {
     if(map.get(stuff) != null){
          int i = map.get(stuff);
          map.put(stuff,i+1)
        }else{
           map.put(stuff, 1);
           }
        }
于 2013-11-11T12:14:48.120 回答
0

如果提供了相同的键,HashMap 会替换值。

来自 HashMap#put 的 Java 文档

将指定的值与此映射中的指定键相关联。如果映射先前包含键的映射,则替换旧值。

尝试这样的事情

for(String w : words) {
    Integer i = wordCounts.get(w);
    if(i == null) wordCounts.put(w, 1);
    else wordCounts.put(w, i + 1);
}
于 2013-11-11T12:15:12.517 回答
0
        for(String i: quoteOne)
            map.put(i, (map.get(i)!=null)? map.get(i)+1:1);
于 2013-11-11T12:35:55.613 回答