这是我在尝试写出Selection排序时遇到的错误。有人能指出我做错了什么。我的代码如下。谢谢!
public class Selection
{
static void sort(Comparable[] a)
{
int N = a.length;
for (int i = 0; i < N; i++)
{
int min = i;
for (int j = i+1; j < N; j++)
if (less(a[j], a[min]))
min = j;
exch(a, i, min);
}
}
private static boolean less(Comparable v, Comparable w)
{
return v.compareTo(w) < 0;
}
private static void exch(Comparable[] a, int i, int j)
{
Comparable temp = a[i];
a[i] = a[j];
a[j] = temp;
}
public static void main(String args[])
{
int[] ys = {3,4,5,5,22,4,66,4444,33,3,656,544,4};
Selection.sort(ys);
}
}
答案 0 :(得分:5)
int是基本类型,因此无法实现任何接口。这就是为什么无法将int []传递给期望Comparable []。
的方法您可以通过将ys
更改为Integer数组(即Integer [])来克服此错误,因为Integer实现了Comparable。
答案 1 :(得分:2)
int
是原始数据类型。它不是一个类,它没有实现Comparable
您应该使用Integer代替Comparable
。
答案 2 :(得分:0)
可比较适用于对象,如您所知,int
不是对象。 int[]
解析为singular object
而不是对象数组。
如果您将ys
定义为Integer[]
,那么您将获得预期的对象数组。
答案 3 :(得分:0)
如前面提到的那样,您不能对int
应用Comparable
,但如果您仍想使用基元并使用Integer
代替Comparable
实现Comparable
,编译器将隐式地将int
转换为Integer
:
static void sort(int[] a)
{
int N = a.length;
for (int i = 0; i < N; i++)
{
int min = i;
for (int j = i+1; j < N; j++)
if (less(a[j], a[min]))
min = j;
exch(a, i, min);
}
}
private static boolean less(Integer v, Integer w)
{
return v.compareTo(w) < 0;
}
private static void exch(int[] a, int i, int j)
{
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}