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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐帅 中级黑马   /  2012-5-27 16:04  /  2372 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在每次遍历的结束后,count都清零的话,那下次遍历到相同的字母
count不又从0开始了吗?那如何实现相同字母的次数的累加呢?纠
结了半天啊,请大侠指教

import java.util.*;

class Function
{
        public void CharCount(String str)
  {
        char []ch  = str.toCharArray();

        TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
        int count = 0;
        for (int x = 0;x < ch.length ;x++ )
        {
                Integer value = tm.get(ch[x]);
                if (value!= null)
                count = value;
                count++;
                        tm.put(ch[x],count);

                        count = 0;
               
               
        }
        System.out.println(tm);

  }
}

class  MapDemo3
{
        public static void main(String[] args)
        {
                String str = "adadscceeeeca";

                Function ct = new Function();
                ct.CharCount(str);
        }
}


评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

8 个回复

倒序浏览

回帖奖励 +2

把map里的value取出来 赋值给count  再自增1  再存入map集合中  依次循环
回复 使用道具 举报
Integer value = tm.get(ch[x]);//获取已存的字母次数value
                if (value!= null)//如果已经存过字母
                count = value;//则将获取到的字母次数value赋给count
                count++;//如果没有存过字母,则count由0,加一(自加便是加1)
回复 使用道具 举报
每一次都不把count清0会导致结果混乱,只要有字母不管是不是相同都会使count自加,譬如传入字符串“abcd”,进入for循环后,先得到a发现value=null,于是count++,即count=1;然后存入map集合一个键值对即a=1;接着得到b,value=null,count又自加,这时count=2,然后存入map集合一个键值对即b=2;可是b只出现了一次,接着会不断存入c=3,d=4;这都是错误的,所以必须每循环一次使count清零一次,这样如果a是第一次出现经一次循环存入map集合一个键值对a=1,再次遇到a时由于value!=null所以count=value而不会等于0.如果b是第一次存入由于value=null;同时上次循环后把count清零了,所以这次存入b=1,这样就不会出错了。
回复 使用道具 举报
贠(yun)靖 发表于 2012-5-27 16:15
把map里的value取出来 赋值给count  再自增1  再存入map集合中  依次循环

明白了。问题是自己对if--else 语句的理解不够透彻,
谢谢了
回复 使用道具 举报
黑马11期李项京 发表于 2012-5-27 16:22
Integer value = tm.get(ch[x]);//获取已存的字母次数value
                if (value!= null)//如果已经 ...

谢谢,明白了,是自己没有对if-else 语句理解透彻
回复 使用道具 举报
徐帅 中级黑马 2012-5-27 18:15:04
7#
袁培育 发表于 2012-5-27 16:28
每一次都不把count清0会导致结果混乱,只要有字母不管是不是相同都会使count自加,譬如传入字符串“abcd” ...

谢谢你的详解,明白了,很感谢啊
回复 使用道具 举报
count = value;已经将存储在TreeMap中的字母的次数赋给了count, tm.put(ch[x],count);也将变化后的count值存入了TreeMap中,下次又是从TreeMap中取得value,然后赋给count,达到记录出现次数的目的。
回复 使用道具 举报
徐帅 中级黑马 2012-5-28 18:48:49
9#
路冬冬 发表于 2012-5-28 00:22
count = value;已经将存储在TreeMap中的字母的次数赋给了count, tm.put(ch[x],count);也将变化后的count值 ...

明白了,很感谢啊
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马