2016-02-29 57 views
2

我想实现我的排序方法,这需要一个通用的E[]作为参数,在我int[]。我收到的错误:方法(E [])是不适用的参数(INT [])

The method sort(E[]) in the type HeapSort is not applicable for the arguments (int[]).

我的代码如下:

public <E extends Comparable<E>> void sort(E[] array){ 

//my code 

} 

public static void main(String[] args){ 
    int[] arr = new int[30]; 
    for(int rep = 0; rep < arr.length; rep++){ 
     arr[rep] =(int)(Math.random() * 100 + 0); 
    } 

    System.out.println("The unsorted Array: "); 
    System.out.println(sort(arr).toString()); 
} 

任何想法,为什么我得到这个错误?所有帮助赞赏!谢谢!

+0

'的System.out.println(排序(ARR)的ToString());'是无效的,因为这'排序()'方法返回'void'。 – MikeCAT

+0

错误消息已足够清楚。你对此不了解什么? – Raedwald

回答

4

原始类型不能替换泛型类型参数(即使它可以,也不能满足您的extends Comparable<E>类型绑定,因为原始类型不扩展任何类并且不实现任何接口)。

您可以int[]Integer[]取代,它会工作。

除了那个错误,sort(arr)不会返回任何东西,所以你不能执行toString就可以了。

您可以将其替换为:

new HeapSort().sort(arr); // you must create an instance of the class that contains 
          // the sort method in order to call it 
System.out.println(Arrays.toString(arr)); 
+0

非常感谢大家。我现在感觉有些愚蠢,因为这似乎是给定的。但是,我现在收到错误:“ - 不能对数组类型Integer []”调用sort()。谢谢你的帮助 –

+0

@ A.Takami你的排序方法应该是静态的吗?您的代码尝试从静态上下文(主要方法)调用它,而不创建包含'sort'的类的实例。 – Eran

+0

我的排序方法不是静态的。是的,我只是想以任何方式调用我的“排序”。当我发布这个,并没有真正考虑三次。从主体中调用非静态排序的正确方法有多大? –

1

让我们来看看你写那里。

public <E extends Comparable<E>> void sort(E[] array) 

这是一种称为排序的方法。它具有带约束的泛型参数。约束条件是无论您输入的通用参数是什么,它都必须实现Comparable。

int没有执行Comparable,实际上int没有执行任何操作。

Java泛型完全不具有原始类型的工作。通用约束只会限制你更远。