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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郑世光 中级黑马   /  2012-9-2 09:25  /  2900 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

/*
程序要打印出字符串addbbaacc中每个字母出现的次数。要求打印的结果是{a=3, d=2, b=2, c=2},也就是按每
个字母出现的次序排列,而不是按字母表的顺序排列。
程序中不加比较器打印没问题:{a=3, b=2, c=2, d=2},但此顺序不是想要的。加比较器的话,打印得结果就
有问题:{a=1, d=2, b=2, a=2, c=2},想要的结果是{a=3, d=2, b=2, c=2}。请问该比较器Mycom该如何写?
*/
import java.util.*;
class MapDemo3
{
public static void main(String[] args)
{
  Test t=new Test();
  t.setStr("addbbaacc");
  t.print();
}
}

class Test
{
String str;
public void setStr (String str)
{
  this.str=str;
}
public void print ()
{
  char[] ch=str.toCharArray();
  TreeMap<Character,Integer> hm = new TreeMap<Character,Integer>(new Mycom());//加比较器
  
  for (int x=0;x<ch.length ;x++ )
  {
   Integer a=hm.get(ch[x]);
   if (a==null)
   {
    hm.put(ch[x],1);
   }
   else{a=a+1; hm.put(ch[x],a);}
  }
  System.out.println(hm);
}
}

class Mycom implements Comparator<Character>
{
public int compare (Character s1,Character s2)
{
  int a=s1.compareTo(s2);
  if (a==0)
  {
   return 0;
  }
  else return 1;
}
}

点评

你没有存储任何关于字符出现顺序的信息,我认为是写不出来你说的那种比较器的,你写的比较器我也没有读懂,你用LinkedHashMap就行了  发表于 2012-9-2 10:48

2 个回复

倒序浏览
/*
程序要打印出字符串addbbaacc中每个字母出现的次数。要求打印的结果是{a=3, d=2, b=2, c=2},也就是按每
个字母出现的次序排列,而不是按字母表的顺序排列。
程序中不加比较器打印没问题:{a=3, b=2, c=2, d=2},但此顺序不是想要的。加比较器的话,打印得结果就
有问题:{a=1, d=2, b=2, a=2, c=2},想要的结果是{a=3, d=2, b=2, c=2}。请问该比较器Mycom该如何写?
*/
import java.util.*;
class MapDemo3
{
public static void main(String[] args)
{
   Test t=new Test();
   t.setStr("addbbaacc");
   t.print();
}
}

class Test
{
String str;
public void setStr (String str)
{
   this.str=str;
}
public void print ()
{
   char[] ch=str.toCharArray();
  LinkedHashMap<Character,Integer> hm = new LinkedHashMap<Character,Integer>();//改用这个LinkedHashMap
   
   for (int x=0;x<ch.length ;x++ )
   {
    Integer a=hm.get(ch[x]);
    if (a==null)
    {
     hm.put(ch[x],1);
    }
    else{a=a+1; hm.put(ch[x],a);}
   }
   System.out.println(hm);
}
}

class Mycom implements Comparator<Character>
{
public int compare (Character s1,Character s2)
{
   int a=s1.compareTo(s2);
   if (a==0)
   {
    return 0;
   }
   else return 1;
}
}
回复 使用道具 举报
换成LinkedHashMap,他可以记顺序
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马