黑马程序员技术交流社区

标题: Map集合的问题 >>>抢分啦 [打印本页]

作者: 杨华东    时间: 2012-9-28 18:54
标题: Map集合的问题 >>>抢分啦
import java.util.*;
import java.util.Map.Entry;
public class Demo1
{
public static void main(String[] args)
{
  charCount("cfgd5ZI001KJIUYUGLKOLUIHUIUIHUIUIUIUI545455450111drtsaaa");
}
public static void charCount(String str)
{
  
  char[] chs=str.toCharArray();
  
  TreeMap<Character,Integer> tp=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'||chs[x]>=0&&chs[x]<=9))
     //throw new RuntimeException("出现非法字符");
    continue;
   Integer value=tp.get(chs[x]);
   if(value!=null)
   {
    tp.put(chs[x], 1);
   }
   else
   {
    value=value+1;
    tp.put(chs[x], value);
   }
   
  }
  //System.out.println(tp.get('p'));
  Set<Map.Entry<Character,Integer>> entryset=tp.entrySet();
  Iterator<Entry<Character, Integer>> it=entryset.iterator();
  while(it.hasNext())
  {
   Map.Entry<Character, Integer> me=it.next();
   Character key=me.getKey();
   Integer value=me.getValue();
     System.out.print(key+"("+value+")");
  }
}
}

请帮我看一哈 哪里的问题???跪谢。。。

作者: 高照    时间: 2012-9-28 19:34
if(value!=null)//应改为value==null
   {
    tp.put(chs[x], 1);
   }
   else
   {
    value=value+1;
    tp.put(chs[x], value);
   }

作者: 王宝龙    时间: 2012-9-28 19:44
第20行:Integer value=tp.get(chs[x]);//这里的tp还是空的你去索引返回的也是null
第27行:value=value+1;//这里又将一个空的value加1所以会报异常!!
我不知道你的需求是什么?
  1. import java.util.*;
  2. import java.util.Map.Entry;
  3. public class Demo1
  4. {
  5.          public static void main(String[] args)
  6.         {
  7.            charCount("cfgd5ZI001KJIUYUGLKOLUIHUIUIHUIUIUIUI545455450111drtsaaa");
  8.         }
  9.          public static void charCount(String str)
  10.         {
  11.                 char[] chs=str.toCharArray();
  12.                   
  13.                 TreeMap<Character,Integer> tp=new TreeMap<Character, Integer>();
  14.                
  15.                 for(int x=0;x<chs.length;x++)
  16.                 {
  17.                         if(!(chs[x]>='a'&&chs[x]<='z'||chs[x]>='A'&&chs[x]<='Z'||chs[x]>=0&&chs[x]<=9))
  18.                           //throw new RuntimeException("出现非法字符");
  19.                          continue;
  20.                         Integer value=tp.get(chs[x]);//这里的tp还是空的你去索引返回的也是null
  21.                         if(value!=null)
  22.                         {
  23.                                 tp.put(chs[x], 1);
  24.                         }
  25.                         else
  26.                         {
  27.                                 value=value+1;//这里又将一个空的value加1所以会报异常!!
  28.                                 tp.put(chs[x], value);
  29.                         }
  30.                 }
  31.                    //System.out.println(tp.get('p'));
  32.                         Set<Map.Entry<Character,Integer>> entryset=tp.entrySet();
  33.                        
  34.                         Iterator<Entry<Character, Integer>> it=entryset.iterator();
  35.                        
  36.                 while(it.hasNext())
  37.                 {
  38.                         Map.Entry<Character, Integer> me=it.next();
  39.                         Character key=me.getKey();
  40.                         Integer value=me.getValue();
  41.                         System.out.print(key+"("+value+")");
  42.                 }
  43.         }
  44. }
复制代码

作者: 郭阳    时间: 2012-9-28 20:03
你是想记录字符串中的字符出现次数吧

粗心了啊 把27行的!=换成==就可以了
作者: 杨华东    时间: 2012-9-28 20:05
郭阳 发表于 2012-9-28 20:03
你是想记录字符串中的字符出现次数吧

粗心了啊 把27行的!=换成==就可以了 ...

哎  惭愧啊
作者: 柳彬    时间: 2012-9-28 20:22
大哥,你的tp集合没有元素,所以你的value为空,但是你的代码:
if(value!=null)
    {
     tp.put(chs[x], 1);
    }
    else
    {
     value=value+1;
     tp.put(chs[x], value);
    }
中会执行else块代码,由于value为null所以value=value+1会报空指针异常
就会出错。
作者: 李玉生    时间: 2012-9-29 01:02
我覺得寫代碼的時候最好多加注解,以便自己和別人再次使用




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