黑马程序员技术交流社区

标题: 哪位高人给看看这程序哪错了? [打印本页]

作者: せR3n、何必装纯    时间: 2011-11-21 16:56
标题: 哪位高人给看看这程序哪错了?
/*
* 统计字符串”abadcdffbaeba”中每个字符出现了多少次,按次数排序并输出。
   例如:c : 1,e : 1,d : 2,f : 2,b : 3,a : 4
*/

import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap;

public class StringTest{
        Map tree = new TreeMap();
       

        public static void main(String[] args){
               
                String s= charCount("abadcdffbaeba");
               
                System.out.println(s);

               
        }
       
        public static String charCount(String str){
               
                char[] chs = str.toCharArray();
               
                TreeMap<Character,Integer> tm = new TreeMap<Character,Integer>();
                int count = 0;
               
                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)
                                count = value;
                        count++;
                        tm.put(chs[x],count);
                        count = 0;
                       
                       
                        /*
                        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();
                Iterator<Map.Entry<Character,Integer>> it = entrySet.iterator();
               
                while(it.hasNext()){
                       
                        Map.Entry<Character, Integer> me = it.next();
                        Character ch = me.getKey();
                        Integer value = me.getValue();
                        sb.append(ch + ":" + value);
                       
                }
               
                return sb.toString();
                 
                  List<String> list = new ArrayList<String>();

                Iterator it1 = tree.keySet().iterator();
                  
                  String aa[][]=new String[tree.size()][tree.size()];
                  int jj=0;
                  
                  while (it1.hasNext()) {
                   Object temp = it1.next();
                  
                  
                   aa[jj][0]=temp.toString();
                   aa[jj][1]=tree.get(temp).toString() ;
                   jj++;
                  
                  }
                  
                  
                  for(int i=0;i<aa.length;i++){
                  
                   for(int j=0;j<aa.length-i-1;j++){
                    
                    if(Integer.parseInt(aa[j][1])>Integer.parseInt(aa[j+1][1])){
                     
                     String temp=aa[j][1];
                     aa[j][1]=aa[j+1][1];
                     aa[j+1][1]=temp;
                     
                     
                     String temp1=aa[j][0];
                     aa[j][0]=aa[j+1][0];
                     aa[j+1][0]=temp1;
                    }
                   }
                  }
                  
                  for (int i = 0, size = aa.length; i < size; i++){
                          System.out.print(aa[i][0]+":" + aa[i][1]);
                  }
        }
}

作者: 崔浩    时间: 2011-11-21 17:53
看晕了,哥们对你说一个面向对象的思想解决这个问题,将一个字符和他出现的次数封装成一个对象(String str,int count),重写hashCode和equals。并实现Comparable 接口,遍历字符串时候创建这个对象,如果已经存在就修改对象count属性++,如果不存在就创建对象并添加到ArrayList中,由于实现了comparable接口,会自动排序的,不超过20行代码,面向过程的比较麻烦




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