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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 傻瓜一点红 于 2013-5-13 22:23 编辑

编了一个小程序,想用compareTo对字符串数组进行排序,但是怎么调试的结果都不对,请大虾赐教
  1. class Demo
  2. {
  3.         public static void main(String[] args)
  4.         {
  5.                 String[] arr={"56542","883","23","5235434","1232","323426"};
  6.                 for(int i=0;i<arr.length;i++)
  7.                 {
  8.                         for(int j=0;j<arr.length-i-1;j++)
  9.                         {
  10.                                 int a=arr[j].compareTo(arr[j+1]);
  11.                                 if (a>0)
  12.                                 {
  13.                                         String temp="";
  14.                                         temp=arr[j];
  15.                                         arr[j]=arr[j+1];
  16.                                         arr[j+1]=temp;
  17.                                 }
  18.                         }
  19.                 }
  20.                 for(String x:arr)
  21.                         System.out.print(x+"\t");
  22.         }
  23. }
复制代码
输出结果为:1232    23      323426  5235434 56542   883;没法得到正确结果,请各位大虾指点,究竟是怎么回事啊?

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

9 个回复

倒序浏览
你这是在比较字符串,当然是按字符串的比较方式进行比较
所以要把字符串转为数字

int a=arr[j].compareTo(arr[j+1]);
改为
int a=(new Integer(arr[j])).compareTo(new Integer(arr[j+1]));

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

回复 使用道具 举报
乎¤_¤乎 发表于 2013-5-13 18:48
你这是在比较字符串,当然是按字符串的比较方式进行比较
所以要把字符串转为数字

compareTo能直接返回int型的数据啊,如果前者长度大于后者,则返回大于0的数字,相等则返回0,反之则返回小于0的数啊,为啥还要加Integer啊?而且我编的字符串数组都是不同长度的啊,不是很明白啊
回复 使用道具 举报
你是按什么进行排序啊
数字大小?首数字?数字长度?
回复 使用道具 举报
乎¤_¤乎 发表于 2013-5-13 19:05
你是按什么进行排序啊
数字大小?首数字?数字长度?

compareTo当然比的是数字长度了,但不知道怎么回事,输出的结果是错误的
回复 使用道具 举报
用我刚才的方法可以么
回复 使用道具 举报
去查查String类中CompareTo()方法,什么是按字典排序
然后,你想想实现按数字长度排序,那就比较数组元素中字符串长度,可是这样做,并不好,因为,长度相同的时候,你又怎么比较,考问题要全面
代码你自己修改,继续贴出来
回复 使用道具 举报
乎¤_¤乎 发表于 2013-5-13 19:11
用我刚才的方法可以么

如果仅仅针对数字,用Integer类当然可以了,因为这个类比较的就是数字的大小,但如果把数字换成字母,这不就悲剧了吗,我这里主要的问题是为啥这个String类的compareTo不能得到正确的结果
回复 使用道具 举报
哪位大虾能给指点啊{:soso_e134:}
回复 使用道具 举报
String类的compareTo方法是按照字符的ASCII码比较的,1232和23比,先比第一位,1<2,这时就不再比较后面了,可以利用正则定义匹配规则,再进行排序。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马