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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 刘先斌 中级黑马   /  2014-3-27 18:08  /  1150 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.util.*;
/*
获取该字符串中字母出现的次数

  */
public class TreeMapTest1
{
        public static void main(String[] args)
        {

                charCount("abcabfs");
        }

        public static String charCount(String str)
        {
                char[] chs = str.toCharArray();

                TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();

                for (int x = 0; x < chs.length; x++)
                {
                        if (chs[x] >= 'a' && chs[x] <= 'z' || chs[x] >= 'A'&& chs[x] <= 'Z')
                        {
                                continue;
                        }
                        Integer value = tm.get(chs);
                        if (value == null)
                        {
                                tm.put(chs[x], 1);
                        }
                        else
                        {
                                value = value + 1;
                                tm.put(chs[x], value);
                        }
                }
                // System.out.println(tm);
                StringBuilder sb = new StringBuilder();
                Set<Map.Entry<Character, Integer>> entryset = tm.entrySet();
                for (Iterator<Map.Entry<Character, Integer>> it = entryset.iterator(); it
                                .hasNext();)
                {
                        Map.Entry<Character, Integer> me = it.next();
                        Character ch = me.getKey();
                        Integer value = me.getValue();
                        sb.append(ch + "(" + value + ")");
                }
                return sb.toString();
        }
}
——————————————————————————————————————————
运行后报异常如下:
Exception in thread "main" java.lang.ClassCastException: [C cannot be cast to java.lang.Comparable
        at java.util.TreeMap.getEntry(TreeMap.java:325)
        at java.util.TreeMap.get(TreeMap.java:255)
        at exercise.exer.TreeMapTest1.chareCount(TreeMapTest1.java:21)
        at exercise.exer.TreeMapTest1.main(TreeMapTest1.java:10)


请问这是哪里出错了???
谢谢帮忙解答!

3 个回复

倒序浏览
你for循环里面写错了  主函数里面有没有写输出语句
这是我为你改的代码   
import java.util.*;
/*
获取该字符串中字母出现的次数

  */
public class TreeMapTest1
{
        public static void main(String[] args)
        {

               String s= charCount("abcabfs");
                           System.out.println(s);//要有输出语句
        }

        public static String charCount(String str)
        {
                char[] chs = str.toCharArray();

                TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();

                for (int x = 0; x < chs.length; x++)
                {
                        if(! (chs[x] >= 'a' && chs[x] <= 'z' || chs[x] >= 'A'&& chs[x] <= 'Z'))
                        {
                                continue;
                        }
                        Integer value = tm.get(chs[x]);//这里不能传进数组名 要具体的数据。不能传一个指针地址进去。
                        if (value == null)
                        {
                                tm.put(chs[x], 1);
                        }
                        else
                        {
                                value = value + 1;
                                tm.put(chs[x], value);
                        }
                }
                // System.out.println(tm);
                StringBuilder sb = new StringBuilder();
                Set<Map.Entry<Character, Integer>> entryset = tm.entrySet();
                for (Iterator<Map.Entry<Character, Integer>> it = entryset.iterator(); it
                                .hasNext();)
                {
                        Map.Entry<Character, Integer> me = it.next();
                        Character ch = me.getKey();
                        Integer value = me.getValue();
                        sb.append(ch + "(" + value + ")");
                }
                return sb.toString();
        }
}


报的错误就是类型转换异常 所以你看看那里数据传错了 或是那里转换错了 就能发现具体错误地方了 。
希望能帮到你

评分

参与人数 1技术分 +1 收起 理由
菜小徐 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 郭黎明 于 2014-3-27 19:11 编辑

   if (chs[x] >= 'a' && chs[x] <= 'z' || chs[x] >= 'A'&& chs[x] <= 'Z')
                        {
                                continue;
                        }
你的这个判断就停在里面,不会执行下面的与句,continue的意思是如果if语句满足,则继续判断if语句里面的内容,直到不满足为止,所以你这个地方用错了,不过在这个地方,你没必要进行这一判断 ,第二个细节楼上的兄弟已经给你指出了


回复 使用道具 举报
有两个地方要改:
                public static void main(String[] args)
                {               
                        System.out.println(charCount("abcabfs"));
                }
                public static String charCount(String str)
                {
                        char[] chs = str.toCharArray();

                        TreeMap<Character, Integer> tm = new TreeMap<Character, Integer>();

                        for (int x = 0; x < chs.length; x++)
                        {
                                //改点1:if()里的比大小富豪全反了,改成如下所示
                                if (chs[x] <= 'a' && chs[x] >= 'z' || chs[x] <= 'A'&& chs[x] >= 'Z')
                                {
                                        continue;
                                }
                                //改点2:chs后面忘记加[x],改成如下所示
                                Integer value = tm.get(chs[x]);//这里你少了一个[x]
                                if (value == null)
                                {
                                        tm.put(chs[x], 1);
                                }
                                else
                                {
                                        value = value + 1;                                        
                                        tm.put(chs[x], value);
                                }
                        }
                        // System.out.println(tm);
                        StringBuilder sb = new StringBuilder();
                        Set<Map.Entry<Character, Integer>> entryset = tm.entrySet();
                        
                        for (Iterator<Map.Entry<Character, Integer>> it = entryset.iterator() ;it.hasNext();)
                        {
                                Map.Entry<Character, Integer> me = it.next();
                                Character ch = me.getKey();
                                Integer value = me.getValue();
                                sb.append(ch + "(" + value + ")");
                        }
                       return sb.toString();                      
                }
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马