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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 1659177869 中级黑马   /  2015-3-21 01:43  /  1501 人查看  /  7 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. }
复制代码

就是代码里标的问题,想不太明白。

7 个回复

倒序浏览
值是种类型,不能++;Integer能够自动拆箱,所以能+1,然后装箱,变为Integer类存进集合
回复 使用道具 举报 1 0
java中的运算符++(自增运算符)和--(自减运算符)是单目运算符,其操作元必须是整型和浮点型变量,可放在操作符之前,也可放在操作符之后,但是意义有所不同。而tm.get(ch[i])+1就可以,是因为java中自动拆箱装箱特性,
写成tm.get(ch[i])++就会编译出错,是因为不符合语法规则,不符合运算符++的语法
回复 使用道具 举报
++前面不能跟表达式,写成下边这样就可以:
  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++);
复制代码
回复 使用道具 举报
稍微看了一下楼主写的,有点复杂啊,这是我写的,供楼主参考一下
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())
                                        + ")");
                }
        }

}

基本思路就是统计哪个字母出现的次数,就以哪个字母为分界线将原字符串分割,用原字符串长度减去分割后字符串的长度就是该字符出现的次数
回复 使用道具 举报 1 0
试了一下应该是可以的
回复 使用道具 举报
jackwang 发表于 2015-3-21 09:40
java中的运算符++(自增运算符)和--(自减运算符)是单目运算符,其操作元必须是整型和浮点型变量,可放在 ...

明白了,谢谢大神
回复 使用道具 举报
lrd7512369 发表于 2015-3-21 12:06
稍微看了一下楼主写的,有点复杂啊,这是我写的,供楼主参考一下
public class Add {

这个果然不错啊:time:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马