public class GenericSort<G extends Comparable> {
private G[] integerarray;
public GenericSort(G[] inputarray){
this.integerarray = inputarray;
//check empty array
if (integerarray ==null || integerarray.length==0){return;}
quickSort(0,integerarray.length-1);
}
public void quickSort(int low, int high){
int i = low;
int j = high;
//set Pivot
G pivot = integerarray[low + (high-low)/2];
while(i<=j){
//check left
while(integerarray[i]<pivot){i++;}
//check right
while(pivot<integerarray[j]){j--;}
//swap
if(i<=j){
G temp = integerarray[i];
integerarray[i] = integerarray[j];
integerarray[j] = temp;
i++;
j--;
}
}
//recursion
if(low<j){quickSort(low,j);}
if(i<high){quickSort(i,high);}
}
}
这一行:
while(integerarray[i]<pivot) {
i++;
} &
while(integerarray[i]<pivot){i++;}
给出错误,因为未知类型之间不允许发生错误。所以我从可比的范围扩展了G.还是不行。怎么解决?
答案 0 :(得分:4)
<
和>
仅适用于基元。如果您的类实现了Comparable
,请使用它的compareTo
方法并将结果与0进行比较
答案 1 :(得分:2)
实施Comparable不允许您使用比较运算符&gt;,&lt;,==。它不是C ++,伙计。 :(
相反,您必须使用Comparable接口中定义的compareTo()方法。
还有一个评论。你能否区分两种绝对不同的东西,比如“不工作”和“不编译”。在您的情况下,您无法编译您的代码。当您的代码未编译时,您实际上不必发布如此大的代码段。随着较少的文本和较小的代码片段,您发送更高的机会获得良好的答案。
祝你好运!PS:检查Collections.sort()作为参考。它完全符合您的目标。
答案 2 :(得分:2)
您无法将对象与&lt;,&gt;等运算符进行比较或==。
Comparable是一个接口,指定方法compareTo(Object o)
Look here