当柳上原的风吹向天际的时候...

真正的快乐来源于创造

  BlogJava :: 首页 :: 联系 :: 聚合  :: 管理
  368 Posts :: 1 Stories :: 201 Comments :: 0 Trackbacks
题设:
请制作一个类,它可以累计多个字符串中字母的出现次数,最后可以以从高到低的顺序打印出来,没有出现过的字母不打印。
如输入的句子是:ajax和JavaScript,最后输出是
a出现了4次
j出现了2次
c出现了1次
i出现了1次
p出现了1次
r出现了1次
s出现了1次
t出现了1次
v出现了1次
x出现了1次

字母类:
public class Letter{
  
// 包含的字母
  private char c;
  
  
// 字母出现的次数
  private int count;
  
  
public void addCount(int count){
    
this.count+=count;
  }


  
public char getC() {
    
return c;
  }


  
public void setC(char c) {
    
this.c = c;
  }


  
public int getCount() {
    
return count;
  }


  
public void setCount(int count) {
    
this.count = count;
  }

}


字母计数器类:
public class LetterCaculator {
  
// 储存26个字母及其出现次数的数组
  private Letter[] letters;

  
/**
   * 构造函数
   *
   
*/

  
public LetterCaculator() {
    
// 初始化数组
    letters = new Letter[26];

    
// 初始化每个数组子项并给其中字母赋值
    for (int i = 0; i < letters.length; i++{
      letters[i] 
= new Letter();
      letters[i].setC((
char) ('a' + i));
    }

  }


  
/**
   * 分析句子,累计其中字母出现次数,大小写不论
   * 
@param sentence
   
*/

  
public void analyse(String sentence) {
    sentence
=sentence.toLowerCase();
    
    
for (int i = 0; i < sentence.length(); i++{
      
char c = sentence.charAt(i);
      
      
if(c>='a' && c<='z'){
        letters[c 
- 'a'].addCount(1);
      }

    }

  }


  
/**
   * 打印字母出现次数,出现零次不计
   *
   
*/

  
public void printLettersInfo() {
    Letter[] letters2 
= letters;
    insertSort(letters2);

    
for (int i = letters2.length - 1; i > 0; i--{
      Letter letter 
= letters2[i];

      
if (letter.getCount() > 0{
        System.out.println(letter.getC() 
+ "出现了" + letter.getCount()
            
+ "");
      }
 else {
        
break;
      }

    }

  }


  
/**
   * 对数组进行排序
   * 
@param arr
   
*/

  
private static void insertSort(Letter[] arr) {
    
int i;
    Letter temp;
    
// 插入位置
    int insertPos;
    
for (i = 1; i < arr.length; i++{
      
// 当前需要进入已排序队列的项
      temp = arr[i];
      insertPos 
= i;

      
// 在已排序序列中找到合适的位置
      while (0 < insertPos
          
&& arr[insertPos - 1].getCount() >= temp.getCount()) {
        arr[insertPos] 
= arr[insertPos - 1];
        
--insertPos;
      }


      
// 当前项该处于的位置
      arr[insertPos] = temp;
    }

  }

}


测试语句:
LetterCaculator letterCaculator=new LetterCaculator();

//letterCaculator.analyse("struts");
//letterCaculator.analyse("spring");
//letterCaculator.analyse("Hibernate");
letterCaculator.analyse("JavaScript");
letterCaculator.analyse(
"Ajax ");

letterCaculator.printLettersInfo();

输出:
a出现了4次
j出现了2次
c出现了1次
i出现了1次
p出现了1次
r出现了1次
s出现了1次
t出现了1次
v出现了1次
x出现了1次
posted on 2009-02-27 23:45 何杨 阅读(378) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: