Java 使用映射统计小写单词中字母出现次数的静态方法

Java 使用映射统计小写单词中字母出现次数的静态方法,java,class,generics,hashmap,Java,Class,Generics,Hashmap,我必须使用一个名为countLetters()的静态方法创建一个名为MakeMap的类。该方法应将由小写字母组成的单词作为参数,并返回单词中字母计数的映射。 这是主类的测试代码(我无法编辑): import java.util.Map; 导入java.util.List; 导入java.util.ArrayList; 导入java.util.Collections; 公共班机 { 公共静态void main(字符串[]args) { Map count=MakeMap.countLetters(

我必须使用一个名为countLetters()的静态方法创建一个名为MakeMap的类。该方法应将由小写字母组成的单词作为参数,并返回单词中字母计数的映射。 这是主类的测试代码(我无法编辑):

import java.util.Map;
导入java.util.List;
导入java.util.ArrayList;
导入java.util.Collections;
公共班机
{
公共静态void main(字符串[]args)
{
Map count=MakeMap.countLetters(“hello”);
列表字母=新的ArrayList(count.keySet());
收集.分类(信件);
用于(字符字母:字母)
System.out.println(“有“+count.get(字母)+”的字母“+letter+””);
}
}
输出的格式也必须如下所示: $java Main 字母“e”中有1个 字母“h”中有1个 字母“l”中有两个字母 字母“o”中有1个

这就是我到目前为止在MakeMap类中所尝试的。我觉得我只需要一些小的调整就可以让它工作了

import java.util.Map;
import java.util.TreeMap;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;

public class MakeMap
{
    public static Map countLetters(String word)
    {
        HashMap<Character, Integer> charCountMap = new HashMap<Character, Integer>();
        String w = word.toLowerCase();
  
        // checking each char of strArray 
        for(int i = 0; i < word.length(); i++)
        {
            if(charCountMap.containsKey(word.charAt(i)))
            { 
                // If char is present in charCountMap, 
                // incrementing it's count by 1 
                charCountMap.put(word.charAt(i), charCountMap.get((word.charAt(i)) + 1 ));
            } 
            else
            { 
                // If char is not present in charCountMap, 
                // putting this char to charCountMap with 1 as it's value 
                charCountMap.put(word.charAt(i), 1); 
            }
        }
        return charCountMap;
    }

}
import java.util.Map;
导入java.util.TreeMap;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.HashMap;
公共类MakeMap
{
公共静态映射计数字母(字符串字)
{
HashMap charCountMap=新HashMap();
字符串w=word.toLowerCase();
//检查strArray的每个字符
for(int i=0;i
这是我收到的错误消息: 注意:Main.java使用未经检查或不安全的操作。
注意:使用-Xlint:unchecked重新编译详细信息。

不正确的括号应为:

charCountMap.put(word.charAt(i)、(charCountMap.get(word.charAt(i))+1))


另外,您必须从此方法返回
charCountMap
,而不是在那里打印出来,因此该方法必须定义为
public static Map countlets(字符串词)
您好您在这里遇到问题:

 charCountMap.put(word.charAt(i), charCountMap.get((word.charAt(i)) + 1 ));
一定是

charCountMap.put(word.charAt(i), charCountMap.get((word.charAt(i))) + 1 );

您应该
返回charCountMap

如前所述,
countlets()
在您的实现中返回
void
;给定的代码期望它返回一个
HashMap
。你可以在方法的末尾返回你的
charCountMap
,它就可以工作了

一些补充说明:

你有一句台词
String w=word.toLowerCase()
这没什么用,因为你再也不用
w
;您需要将其更改为
word

最后,如果您执行类似于
的操作,则括号错误很容易避免
charcurr=word.charAt(i)

在循环中,然后使用
curr
代替
word.charAt(i)
。使它更容易阅读,看起来更干净。

欢迎使用SO!像“我如何使这项工作”这样的问题很难回答,你能提供一些关于错误或你得到的输出的信息吗?
charCountMap.put(word.charAt(i), charCountMap.get((word.charAt(i))) + 1 );