A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 wkz_crystal 于 2015-3-22 00:07 编辑

如图所示:
  1. <font size="3">/*
  2. 统计一个字符串中“每种字母出现的次数”,并且打印出来
  3. 打印的格式:x(几次)y(几次)……

  4. 例如字符串:gfadgagkolauinaaf
  5. 【思路】
  6. 1.将字符串转化成为字符数组,因为要对每一个字母进行操作
  7. 2.定义一个map集合,因为打印结果的字母有顺序,所以要用到treemap集合
  8. 3.遍历字符数组
  9.         将每一个字母作为健去查map集合,
  10.         如果返回为null,将该字符和1存入到map集合中,
  11.         如果返回不为null,说明该字符和对应的次数在集合中已经存在了,
  12.         这时候,直接取出字符次数,自增之后再重新按照该健存入到集合中
  13. */
  14. import java.util.*;
  15. class GetCharNumber5
  16. {
  17.         public static void main(String[] args)
  18.         {
  19.                 String str="jfkl;ajf;lajfaljfl;afasfsadfds";
  20.                 getInfer(str);
  21.         }

  22.         public static void getInfer(String str)
  23.         {
  24.                 char[] ch=str.toCharArray();
  25.                 TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();

  26.                 for (int i=0; i<ch.length;i++ )
  27.                 {
  28.                         Integer value=tm.get(ch[i]);
  29.                         
  30.                         if (value == null)
  31.                         {
  32.                                 tm.put(ch[i],1);
  33.                         }else
  34.                         {
  35.                                 value=value+1;
  36.                                 tm.put(ch[i],value);
  37.                         }
  38.                 }
  39.                
  40.                 /*StringBuffer sb=new StringBuffer();
  41.                 Set<Map.Entry<Character,Integer>> setMap=tm.entrySet();
  42.                 Iterator<Map.Entry<Character,Integer>> it=setMap.iterator();
  43.                
  44.                 while (it.hasNext())
  45.                 {
  46.                         Map.Entry<Character,Integer> me=it.next();
  47.                         Character key=me.getKey();
  48.                         Integer value=me.getValue();
  49.                         sb.append(key+"("+value+")"+"、");
  50.                 }

  51.                 sop(sb);
  52.                 */

  53.                 StringBuffer sb=new StringBuffer();
  54.                 Set<Character,Integer> set=tm.keySet();
  55.                 Iterator<Character,Integer> it=set.iterator();
  56.                 while (it.hasNext())
  57.                 {
  58.                         Character key=it.next();
  59.                         Integer value=tm.get(key);
  60.                         sb.append(key+"("+value+")"+"、");
  61.                 }
  62.                 sop(sb);        
  63.         }
  64.         
  65.         public static void sop(Object obj)
  66.         {
  67.                 System.out.println(obj);
  68.         }
  69. }</font>
复制代码
用entrySet可以实现,是正确的,但是用keySet为什么就不行呢?

1.jpg (248.83 KB, 下载次数: 12)

类型变量数目错误;

类型变量数目错误;

1 个回复

倒序浏览
本帖最后由 wkz_crystal 于 2015-3-22 00:26 编辑

大家发现问题没有,我是太不仔细了,公然把keySet的方法返回的Set类型,泛型中定义成了<Character,Integer>,现在才发现是错误的,得到的set集合的泛型类型只有一种,应该是<Character>才是,晕死了……哎……还在这里研究老半天!大家有同样的错误吗?所以代码应该是:
  1. Set<Character> set=tm.keySet();
  2.                 Iterator<Character> it=set.iterator();
复制代码
就OK了……
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马