Java compareTo for String和Integer参数

3 java compareto

我正在实现冒泡排序算法,我希望它能够接受这两个IntegerString参数.我将所有输入转换为字符串,并使用该compareTo方法将作为字符串的整数与字符串进行比较.当compareTo用于比较转换的整数时,我得到的答案不正确.我究竟做错了什么?

Iai*_*der 7

Integer.compareTo以数字方式对数字进行排序.这就是你想要的.

String.compareTo按字典顺序排序字符串; 也就是说,按字母顺序排列.

我记得在Windows 3.1中我的数码相机的照片文件夹是这样订购的:PHOTO1,PHOTO10,PHOTO100,PHOTO2,PHOTO20,PHOTO3,......等等.Windows XP按照您的预期对它们进行排序:PHOTO1,PHOTO2,PHOTO3,...等等,这是因为它对表示数字的字符串有特殊的排序规则.

在字典顺序中,将一个字符串A中的每个字符与另一个字符串B中的相应字符进行比较.对于两个字符串中的每个对应字符:

  • 如果A的当前字符按字典顺序小于(在字母表之前)B的字符,则A在B之前出现.
  • 如果B的字符小于A的字符,则B在A之前出现.
  • 如果两个字符相同,那么我们还不知道.检查下一个.
  • 如果其中一个字符串中没有剩余字符,则较短的字符在较长的字符串之前.
  • 如果两个字符串中没有剩余字符,则它们是相同的字符串.

这里的第四点是你得到错误答案的原因,假设Eddie对你的问题的分析是正确的.

考虑字符串"10"和"2".字典顺序将分别查看每个字符的第一个字符"1"和"2".字符'1'在Java使用的字符集中位于'2'之前,因此它在"2"之前排序"10",就像"bare"在"hare"之前排序一样,因为'b'在'之前' H'.

我建议你在排序之前将字符串转换为整数.使用Integer.parseString执行此操作.