我读了一个包含城市及其人口的文件,我正在尝试使用选择排序按字母顺序对城市进行排序。 问题在于,由于某种原因,它以奇怪的方式对其进行排序。 "排序"的顺序列表是" ABDCEFHG ..."我试过跟着它,但我无法理解它在哪里搞砸了。这是代码:
//Selection
for (int i = 0; i < cities.size() - 1; i++)
{
int minPos = i;
for (int j = i + 1; j < cities.size(); j++)
{
if (cities.get(j).compareToIgnoreCase(cities.get(minPos)) < -1)
minPos = j;
}
swap(cities, minPos, i);
}
System.out.print("\nSelection: ");
for(int i = 0; i < cities.size(); i++)
System.out.print(cities.get(i) +"|");
private static void swap(ArrayList <String> a, int i, int j)
{
String temp = a.get(i);
a.set(i, a.get(j));
a.set(j, temp);
}
知道什么是错的吗?
由于
答案 0 :(得分:0)
正如其他人所提到的,你的问题几乎肯定是你的... < -1
比较,这在比较器的背景下基本上没有意义。如Comparable
中所述,Java中的比较通常通过返回
负整数,零或正整数,因为此对象小于,等于或大于指定对象。
String.compareToIgnoreCase()
遵循相同的规则:
Returns: a negative integer, zero, or a positive integer as the specified String is greater than, equal to, or less than this String, ignoring case considerations.
这些合同故意不对这些负面或正面数字的内容说什么,因此实现能够做最简单的事情。许多实现将明确返回-1
,0
或1
,但其他实现(包括String
中的实现)使用减法作为快捷方式,返回被比较项之间的差异,例如x.compareTo(y)
执行return x-y
。如果x
和y
相同,则结果为0
,否则如果x
较小则返回负数,如果x
则返回正数更大。
简而言之,您必须始终使用0
作为比较点。