class BubbleSort<T> extends ArraySort<T>
{
public void iSort(T[] inArray) {
int n = inArray.length;
int k;
for (int m = n; m >= 0; m--) {
for (int i = 0; i < n - 1; i++) {
k = i + 1;
if (compare(inArray[i], inArray[k])) {
T temp;
temp = inArray[i];
inArray[i] = inArray[k];
inArray[k] = temp;
}
}
}
print(inArray);
}
public static <T extends Comparable<T>> boolean compare(T a, T b) {
if (a.compareTo(b) > 0) {
return true;
} return false;
}
我收到(T extends comparable < T >, T extends comparable < T >) in the type bubblesort< T > is not applicable for the arguments (T,T)
错误!
快速解决方法告诉我将方法compare(T,T)< T >
更改为compare(T,T)
,但这不会解决我的问题。当我输入元素的实际值时,它完全正常,例如,compare(3, 5)
或compare("hi", "hello")
而不是compare(inArray[i], inArray[k])
。
如果有人能解释为什么会这样做并给我一个解决方案,我会非常感激。
答案 0 :(得分:1)
您已经使用泛型类型T
定义了您的类,因此为该方法声明一个单独的类没有意义:
class BubbleSort<T extends Comparable<T>> extends ArraySort<T> {
public void iSort(T[] inArray) {
int n = inArray.length;
int k;
for (int m = n; m >= 0; m--) {
for (int i = 0; i < n - 1; i++) {
k = i + 1;
if (compare(inArray[i], inArray[k])) {
T temp;
temp = inArray[i];
inArray[i] = inArray[k];
inArray[k] = temp;
}
}
}
print(inArray);
}
public static boolean compare(T a, T b) {
if (a.compareTo(b) > 0) {
return true;
}
return false;
}
}
无论如何,你应该在类声明中而不是在方法中表示T extends Comparable<T>
。