The method sort(Comparable[]) in the type Shell is not applicable for the arguments (int[])

春衣少年当酒歌,起舞四顾以笑和。这篇文章主要讲述The method sort(Comparable[]) in the type Shell is not applicable for the arguments (int[])相关的知识,希望能为你提供帮助。
看算法第四版的希尔排序时,打算把例中的String数组换成int数组,却出现了上面的问题。最后在StackOverflow找到答案
原代码:

package sort; import edu.princeton.cs.algs4.In; public class Shell{ public static void sort(Comparable[] a) {//将a[]升序排列 int N = a.length; int h = 1; while (h< N/3) h = 3*h + 1; // 1,4,13... while (h> =1) {// 数组变为h有序 for (int i=h; i< N; i++) {// 将a[i]插入到a[i-h],a[i-2h]..中 for (int j=i; j> =h& & less(a[j],a[j-h]); j -= h) { System.out.println(a[j]+" "+a[j-h]+less(a[j],a[j-h])); exch(a,j,j-h); for (int k=0; k< N; k++) System.out.print(a[k]+" "); System.out.println(); } } h = h/3; } } private static boolean less(Comparable v,Comparable w) // 比较元素 {return v.compareTo(w)< 0; } private static void exch(Comparable[] a,int i,int j) // 将元素交换位置 {Comparable t = a[i]; a[i] = a[j]; a[j] = t; } private static void show(Comparable[] a) {//单行打印数组,只有本类的静态方法可调用 for (int i=0; i< a.length; i++) System.out.println(); } public static boolean isSorted(Comparable[] a) {// 判断数组元素是否有序 for (int i=1; i< a.length; i++) if (less(a[i],a[i-1]))return false; return true; } public static void main(String[] args) { // TODO Auto-generated method stub // 从标准输入读取字符串,将它们排序并输出 String[] a = In.readStrings(); sort(a); assert isSorted(a); // 确认有序 show(a); } }

  String[] a = In.readStrings()不能改成int[] a = In.readInts(),因为int是原始数据类型,无法实现接口。应该改成Integer[],然而In类没有对应的方法,所以我改成了
int[] in = In.readInts(); Integer[] a = new Integer[in.length]; for (int i=0; i< a.length; i++) a[i]=in[i]; sort(a); assert isSorted(a); // 确认有序 show(a);

测试有效
【The method sort(Comparable[]) in the type Shell is not applicable for the arguments (int[])】Stackoverflow地址

    推荐阅读