我有一个项目需要我们创建一个对象数组,然后我们将它放在一个链表中,我有点卡住,因为我无法编写/实现我应该对链表进行排序的排序方法。这是我已经走了多远的代码。顺便说一下,对象名称是“温度”;谢谢。
public class SelectionSort
{
private static void SelectionSort (Temperature[] array, int size)
{
for ( int i = 0; i < size - 1; i++ )
{
int indexLowest = i;
for ( int j = i + 1; j < size; j++ )
{
if ( array[j] < array[indexLowest] )
indexLowest = j;
if ( array[indexLowest] != array[i] )
{
Temperature temp = array[indexLowest];
array[indexLowest] = array[i];
array[i] = temp;
}// if
}//for j
}// for i
}// method
}
答案 0 :(得分:1)
我认为,你的问题就在于行
if ( array[j] < array[indexLowest] )
根据您的方法签名,两者 - array[j]
和array[indexLowest]
都属于温度类型。因此它们不是原始类型,因此无法与<
进行比较。这显然会导致编译器错误,您应该告诉我们。
要比较这样的对象,您有两种可能:
1)让班级Temperature
实施Comparable<Temperature>
。此界面将强制您向类public int compareTo(Temperatue other)
添加方法Temperature
。通过以下方式实现此目的:
@Override
public int compareTo(Temperatue other) {
if (/* this is smaller than other */) {
return -1;
} else if (/* this is greater than other */) {
return 1;
} else {
return 0;
}
}
如果您愿意,可以返回任何其他正整数或负整数。根据{{1}}。
中的字段实现自我比较在有问题的行中使用此作为:
Temperature
2)为你的班级温度写一个比较器。
if ( array[j].compareTo(array[indexLowest]) < 0 )
逻辑类似。现在您可以在排序方法中使用此比较器
public class TemperatureComparator implements Comparator<Temperature> {
public int compare(Temperature t1, Temperature t2) {
if (/* t1 is smaller than t2 */) {
return -1;
} else if (/* t1 is greater than t2 */) {
return 1;
} else {
return 0;
}
}
}