黑马程序员技术交流社区

标题: 获取该字符串中,每一个字母出现的次数。 求解答 [打印本页]

作者: 绝版坏银    时间: 2015-6-15 11:46
标题: 获取该字符串中,每一个字母出现的次数。 求解答
  1. package com.itheima_1;

  2. import java.util.Iterator;
  3. import java.util.Map;
  4. import java.util.TreeMap;

  5. /*
  6. * “fdqavcbsacdfs”获取该字符串中,每一个字母出现的次数。
  7. * 要求打印结果是:a(2)b(1)...;
  8. */
  9. public class MapDemo {
  10.         public static void main(String[] args) {
  11.                 //定义一个字符串
  12.                 String s = "fdqavcbsacdfs";
  13.                 //转换成字符数组
  14.                 char[] chs= s.toCharArray();
  15.        
  16.                 //创建map集合对象
  17.                 Map<Character, Integer> map = new TreeMap<>();
  18.                
  19.                 for(int i=0;i<chs.length;i++){
  20.                         if(!(chs[i]>'a'&&chs[i]<'z' || chs[i]>'A'&&chs[i]<'Z')){
  21.                                 continue;
  22.                                
  23.                                 //将数组中的字母作为键去查map表
  24.                                 Integer value = map.get(chs[i]);
  25.                                
  26.                                 int count=0;
  27.                                 //判断是否为空
  28.                                 if(value!=null){
  29.                                         count = value;
  30.                                 }
  31.                                 count++;
  32.                                
  33.                                 map.put(chs[i], count);
  34.                         }
  35.                 }
  36.                
  37.                 //创建迭代器对象
  38.                 Iterator<Character> it = map.keySet().iterator();
  39.                 //集合变量
  40.                 while(it.hasNext()){
  41.                         Character key = it.next();
  42.                         Integer value = map.get(key);
  43.                         System.out.println(key+"("+value+")");
  44.                 }
  45.         }
  46. }
复制代码

这样写,上面for循环里面的Integer value = map.get(chs); 会报错,求解答
作者: micro_hx    时间: 2015-6-15 11:55
强制转换一下。。。。。
作者: 安安安    时间: 2015-6-15 17:36
我帮你看了。你这个简直坑啊。
你少个括号。
导致语句无法执行,当然报错了
你的if语句后面少个结束的括号,如果就一个continue的话不加括号就好了。
但你加了一个括号就血崩了。。
  1. if(!(chs[i]>'a'&&chs[i]<'z' || chs[i]>'A'&&chs[i]<'Z')){
  2.                                 continue;
  3.                         }
  4.                         //将数组中的字母作为键去查map表
  5.                        Integer value = map.get(chs[i]);
复制代码


加个括号就好了,或者直接把前面的括号删了也行。顺便吐槽下楼上是来卖萌的。。

作者: 安安安    时间: 2015-6-15 17:55
安安安 发表于 2015-6-15 17:36
我帮你看了。你这个简直坑啊。
你少个括号。
导致语句无法执行,当然报错了

不对。我刚才又看了下。。你If后面有括号,在很下面。
可是你if判断完直接continue;了下面的语句执行不了肯定会报错的。
作者: 绝版坏银    时间: 2015-6-24 21:19
安安安 发表于 2015-6-15 17:55
不对。我刚才又看了下。。你If后面有括号,在很下面。
可是你if判断完直接continue;了下面的语句执行不了 ...

:)3q,回帖没提示就忘记了。现在看看都不知道自己写的是什么了




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