/**为了练习Java,在这个类中能输出最长的字符,和该字符。但有时不能按顺序输出。希望大家看看,有什么地方该改进。
*/
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.*;
public class Stringtest {
public static void main(String[] args){
System.out.println("Input String:");
Scanner ac=new Scanner(System.in);
String line=ac.nextLine();
StringCp h= new StringCp(line);
h.StringCpo();
h.htComAndPrit();
}
}
class StringCp{
private String str;
private char[]ha;
private int n=1;
LinkedList<number>ht;
StringCp(String str){
this.str=str;
this.ha=new char[this.str.length()];
ht=new LinkedList<number>();
}
// 实现排序并将给中不同的字符存储在LinkedList中
void StringCpo(){

ha=str.toCharArray();
Arrays.sort(ha);
System.out.println(ha);
for(int i=0;i<=ha.length-2;i++){
if(ha[i]==ha[i+1]){
this.n++;
}
else{
this.ht.add(new number(this.n,ha[i]));
this.n=1;
}
if((i+1)==(ha.length-1)){
this.ht.add(new number(this.n,ha[i+1]));
}
}
}
void htComAndPrit(){
Collections.sort(this.ht, new compara());
System.out.println(ht.size());
for(int i=0;i<ht.size();i++){
System.out.println("num="+this.ht.get(i).geti()+" char="+this.ht.get(i).geta());
}
}
}
//存储结构
class number{
int i;
char a;
number(int i,char a){
this.i=i;
this.a=a;
}
int geti(){
return this.i;
}
char geta(){
return this.a;
}
}
//实现比较接口
class compara implements Comparator<number>{
@Override
public int compare(number o1, number o2) {
// TODO Auto-generated method stub
if(o1.i>o2.i)
return o1.i-o2.i;
if(o2.i>o1.i)
return o2.i-o1.i;
else
return o1.a-o2.a;
 

}
}

解决方案 »

  1.   

    //实现比较接口
    class compara implements Comparator<number>{
    @Override
    public int compare(number o1, number o2) {
    // TODO Auto-generated method stub
    if(o1.i>o2.i)
    return 1;
    if(o2.i>o1.i)
    return -1;
    else
    return 0;测试过了。
    测试字符串:aabbaabccddcdcabcdecd
      

  2.   

    原因再于,你原先的输出结果可能是这样:
    num=1 char=e
    num=6 char=c
    num=4 char=b
    num=5 char=a
    num=5 char=d当你用o1.i与o2.i直接相减的话,那个5与4,6与5的结果都是1,这样就是导致排序结果不正确。