【问题标题】:Static method to count occurrences of a letter in a lower case word using maps使用映射计算小写单词中字母出现次数的静态方法
【发布时间】:2020-07-22 11:38:25
【问题描述】:

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

import java.util.Map;
import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

public class Main
{
   public static void main(String [] args)
   {
      Map<Character, Integer> count = MakeMap.countLetters("hello");
      List<Character> letters = new ArrayList<Character>(count.keySet());
      Collections.sort(letters);
      for(Character letter : letters)
         System.out.println("There are " + count.get(letter) + " of the letter '" + letter + "'");
   }
}

输出的格式也必须是这样的: $java 主要 有1个字母'e' 有 1 个字母“h” 有2个字母'l' 有1个字母'o'

这是我迄今为止在 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;
    }

}

这是我收到的错误消息: 注意:Main.java 使用未经检查或不安全的操作。 注意:重新编译时使用 -Xlint:unchecked for details。

【问题讨论】:

  • 欢迎来到 SO!诸如“我如何使这项工作”之类的问题很难回答,您能否提供一些有关错误或您得到的输出的信息?

标签: java class generics hashmap


【解决方案1】:

括号不正确,应该是:

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

另外你必须从这个方法返回charCountMap而不是打印出来,所以这个方法必须定义为public static Map&lt;Character, Integer&gt; countLetters(String word)

【讨论】:

    【解决方案2】:

    你好,这里有问题:

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

    必须

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

    你应该return charCountMap;

    【讨论】:

      【解决方案3】:

      如前所述,countLetters() 在您的实现中返回void;给定的代码期望它返回一个HashMap&lt;Character, Integer&gt;。您可以在方法结束时返回您的charCountMap,它会起作用。

      一些补充说明:

      你有一条线
      String w = word.toLowerCase();.
      这没有任何作用,因为您再也不会使用w;您需要将其更改为 word

      最后,如果您执行类似
      char curr = word.charAt(i);
      之类的操作,可以轻松避免包围错误 在循环中,然后使用curr 而不是word.charAt(i)。使其更易于阅读,看起来更干净。

      【讨论】:

        猜你喜欢
        • 2013-12-10
        • 1970-01-01
        • 2021-06-11
        • 2021-12-27
        • 2022-11-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-16
        • 1970-01-01
        相关资源
        最近更新 更多