本帖最后由 罗会涛 于 2012-12-4 23:51 编辑
先贴代码- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- import java.util.TreeMap;
- public class TreeMapTest
- {
- /**
- * 需求:计算字符串中字母出现的次数并以a(1)、b(6)的格式打印 思路:看到需求是以映射形式存储,所以考虑用map集合 1、将字符串转换成字符数组
- * 2、定义一个map集合,因为打印结果字母顺序有序所以用TreeMap 3、遍历字符数组: 将数组中字母作为键去查map集合
- * 如果返回为NUll将字母和1存入集合 如果返回不为NUll键不变,值自加1再重新存入集合 4、将map集合中的数据按给定格式输出
- */
- public static String treeMapTest(String s)
- {
- char[] ch = s.toCharArray();
- int count = 0;
- Map<Character, Integer> map = new TreeMap<Character, Integer>();
- for (int i = 0; i < ch.length; i++)
- {
- Integer value = null;
- if ((ch[i] >='a' && ch[i] <= 'z') || (ch[i] >='A' && ch[i] <= 'Z'))
- value = map.get(ch[i]);
- if (value != null)
- count = map.get(ch[i]);
- count++;
- map.put(ch[i], count);
- count = 0;
- }
- StringBuilder sb = new StringBuilder();
- Set<Map.Entry<Character, Integer>> entrySet = map.entrySet();
- Iterator<Map.Entry<Character, Integer>> it = entrySet.iterator();
- while (it.hasNext())
- {
- Map.Entry<Character, Integer> me = it.next();
- Character chs = me.getKey();
- Integer value = me.getValue();
- sb.append(chs + "(" + value + ")");
- }
- return sb.toString();
- }
- public static void main(String[] args)
- {
- System.out.println(TreeMapTest.treeMapTest("adfdfdfdsfsdfsdfsfadfsfs"));
- }
- }
复制代码 你的思路写得很好,但是代码不是按你思路来写的
* 3、遍历字符数组:
* 将数组中字母作为键去查map集合
* 如果返回为NUll将字母和1存入集合
* 如果返回不为NUll键不变,值自加1再重新存入集合
"将数组中字母作为键去查map集合",这里就错了,你写的是if(!((ch>'a'&&ch<'b')||(ch>'A'&&ch<'B'))),可能是笔误将b与z写错了
* 如果返回为NUll将字母和1存入集合
* 如果返回不为NUll键不变,值自加1再重新存入集合
你又没有这么做,代码中还从来没有往map中put过任何数据,怎么会有结果呢
25与26行代码
count++;
count = 0;
少了map.put(ch, count);
count自增完还没有用就复位为0了,应该是很容易看到的. |