黑马程序员技术交流社区

标题: 关于求字母出现次数count自加的问题 [打印本页]

作者: 徐帅    时间: 2012-5-27 16:04
标题: 关于求字母出现次数count自加的问题
在每次遍历的结束后,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);
        }
}



作者: 贠(yun)靖    时间: 2012-5-27 16:15
把map里的value取出来 赋值给count  再自增1  再存入map集合中  依次循环
作者: 黑马11期李项京    时间: 2012-5-27 16:22
Integer value = tm.get(ch[x]);//获取已存的字母次数value
                if (value!= null)//如果已经存过字母
                count = value;//则将获取到的字母次数value赋给count
                count++;//如果没有存过字母,则count由0,加一(自加便是加1)
作者: 袁培育    时间: 2012-5-27 16:28
每一次都不把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,这样就不会出错了。
作者: 徐帅    时间: 2012-5-27 18:13
贠(yun)靖 发表于 2012-5-27 16:15
把map里的value取出来 赋值给count  再自增1  再存入map集合中  依次循环

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

谢谢,明白了,是自己没有对if-else 语句理解透彻
作者: 徐帅    时间: 2012-5-27 18:15
袁培育 发表于 2012-5-27 16:28
每一次都不把count清0会导致结果混乱,只要有字母不管是不是相同都会使count自加,譬如传入字符串“abcd” ...

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

明白了,很感谢啊




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2