为什么在使用 selectionSort 时我的论点不起作用? T 有问题,但我无法解决它

问题描述

使用 Java,有人告诉我从教科书中复制 selectionSort 方法并使用它。在使用它时,我在程序中遇到问题,告诉我我的参数 selectionSort(int [],int) 不兼容,但我认为 T 应该是许多不同的参数。为什么这不起作用? (PS忽略对用户输入的请求,这是我添加到作业中的一点额外工作,如果我可以使该方法工作,我可以添加用户输入)(双重PS,我做了另一个方法,printArray来除尘Array蜘蛛网,但没有将方法附加到下面的代码中)。

我从 Eclipse 收到以下消息:方法 selectionSort(T[],int) 在类型 Program15_4 中不是 适用于参数 (int[],int)

我在终止程序时收到以下错误消息:线程“main”中的异常 java.lang.Error:未解决的编译问题: 对于类型 Program15_4

未定义方法 selectionSort(int[],int)
at Program15_4.main(Program15_4.java:25)





import java.util.*;


public class Program15_4 {

    
    public static void main(String[] args) {

        Scanner in = new Scanner(system.in);
        int[] input = new int[10];
        
        
System.out.println("Please enter 10 numbers");
for (int index = 0; index < input.length; index++) {
    input[index] = in.nextInt();
}


int [] n = { 4,8,12,14,20,24 };



System.out.println(selectionSort(n,n.length));

printArray(input);

    }


    
    

    //enter code here
    
    public static <T extends Comparable <? super T>>
    void selectionSort(T[] a,int n)
    {
        for (int index = 0; index <n -1; index++)
        {
            int indexOfNextSmallest = getIndexOfSmallest (a,index,n-1);
            swap (a,indexOfNextSmallest);
            
        }
    }
    private static <T extends Comparable<? super T>>
    int getIndexOfSmallest(T[] a,int first,int last)
    {
    T min = a[first];
    int indexOfMin = first;
    for (int index = first +1; index <= last; index++)
    {
        if (a[index].compareto(min) < 0)
        {
            min = a[index];
            indexOfMin = index;
            
        }
    }
    
    return indexOfMin;
    
}
    private static void swap(Object [] a,int i,int j)
    {
        Object temp = a[i];
                a[i] = a[j];
                a[j] = temp;
    }
    

解决方案:使用上面的 selectionSort() 方法

public class Program15_4 {

    
    public static void main(String[] args) {


Integer [] n = { 20,24,2,21 };



selectionSort(n,n.length);

System.out.println(Arrays.toString(n));

    }

解决方法

一些建议:

  1. 将数组 n 声明为 Integer 数组,而不是 int。在 Java 中,int 是原始类型,不能用于像 T 这样的泛型类型变量。另外,不要按排序顺序初始化数组中的数字,因为您要测试排序代码是否有效。所以,你可以像这样声明你的数组:

    Integer[] n = { 20,14,12,24,2,8,4 };
    
  2. 您的 selectionSort 函数为空,这意味着它不返回任何内容。因此,您不能使用 System.out.println 打印其返回值,因为它没有返回值。所以,只需调用函数:

    selectionSort(n,n.length);
    
  3. 您可以使用 Arrays.toString 方法打印数组,如下所示:

    System.out.println(Arrays.toString(n));