黑马程序员技术交流社区

标题: 大家来看下这个小问题,有点不明白 [打印本页]

作者: 1659177869    时间: 2015-3-21 01:43
标题: 大家来看下这个小问题,有点不明白
  1. /*
  2. 练习:
  3. “sdfsdfsdfsdfdagdfbgberngier”获取该字符串中的字母出现次数
  4. 希望打印结果啊a(1)b(2)...


  5. */
  6. import java.util.*;
  7. class MapTest1
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 String s="sdfsdfsdfsdfdagdfbgberngier";
  12.                 char[] ch=s.toCharArray();

  13.                 TreeMap<Character,Integer> tm=new TreeMap<Character,Integer>();
  14.                
  15.                 //int count=0;
  16.                 for (int i=0; i<ch.length; i++)
  17.                 {
  18.                         //int value=tm.get(ch[i]);
  19.                 //        Integer value=tm.get(ch[i]);
  20.                 //        if(value!=null)
  21.                 //                count=value;
  22.                 //        count++;
  23.                 //        tm.put(ch[i],count);
  24.                 //        count=0;

  25.                        
  26.                         if(!tm.containsKey(ch[i]))
  27.                                 tm.put(ch[i],1);
  28.                         else
  29.                         {
  30.                                                          //为什么这里写成tm.get(ch[i])+1就可以,写成tm.get(ch[i])++就会编译出错呢?
  31.                                 tm.put(ch[i],tm.get(ch[i])++);       
  32.                                 /*
  33.                                         错误信息:MapTest1.java:35:错误:意外的类型
  34.                                                                                                                         tm.put(ch[i],tm.get(ch[i])++);
  35.                                 */
  36.                         }
  37.                        
  38.                 }

  39.                 for (Iterator<Character> it=tm.keySet().iterator(); it.hasNext(); )
  40.                 {
  41.                         char c=it.next();
  42.                         int times=tm.get(c);
  43.                         System.out.print(c+"("+times+")");
  44.                 }
  45.         }
  46. }
复制代码

就是代码里标的问题,想不太明白。
作者: 刘挺    时间: 2015-3-21 09:12
值是种类型,不能++;Integer能够自动拆箱,所以能+1,然后装箱,变为Integer类存进集合
作者: jackwang    时间: 2015-3-21 09:40
java中的运算符++(自增运算符)和--(自减运算符)是单目运算符,其操作元必须是整型和浮点型变量,可放在操作符之前,也可放在操作符之后,但是意义有所不同。而tm.get(ch[i])+1就可以,是因为java中自动拆箱装箱特性,
写成tm.get(ch[i])++就会编译出错,是因为不符合语法规则,不符合运算符++的语法
作者: みぎ    时间: 2015-3-21 10:25
++前面不能跟表达式,写成下边这样就可以:
  1. Integer a = tm.get(ch[i]);
  2. tm.put(ch[i],a++);
  3. // 或者
  4. int a = tm.get(ch[i]);
  5. tm.put(ch[i],a++);
复制代码

作者: lrd7512369    时间: 2015-3-21 12:06
稍微看了一下楼主写的,有点复杂啊,这是我写的,供楼主参考一下
public class Add {

        public static void main(String[] args) {
                String s = "acbabcbcabcaacbccba";
                show(s);

        }

        public static void show(String s) {
                String letter[] = { "a", "b", "c" };
                for (int i = 0; i < letter.length; i++) {
                        String split[] = s.split(letter[i]);
                        String left = "";
                        for (int j = 0; j < split.length; j++) {
                                left += split[j];
                        }
                        System.out.print(letter[i] + "(" + (s.length() - left.length())
                                        + ")");
                }
        }

}

基本思路就是统计哪个字母出现的次数,就以哪个字母为分界线将原字符串分割,用原字符串长度减去分割后字符串的长度就是该字符出现的次数

作者: lrd7512369    时间: 2015-3-21 12:09
试了一下应该是可以的

作者: 1659177869    时间: 2015-3-21 13:38
jackwang 发表于 2015-3-21 09:40
java中的运算符++(自增运算符)和--(自减运算符)是单目运算符,其操作元必须是整型和浮点型变量,可放在 ...

明白了,谢谢大神
作者: 李相斌    时间: 2015-3-22 20:57
lrd7512369 发表于 2015-3-21 12:06
稍微看了一下楼主写的,有点复杂啊,这是我写的,供楼主参考一下
public class Add {

这个果然不错啊:time:




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