2016-05-29 74 views
1

因此,當我想調用比較器引起的mergeSort()方法時,我的Main類出現問題。我得到以下信息:實現Java比較器的問題 - 泛型

Image of the error message

我不知道如何解決這個問題..請幫助我!

注意: 不要懷疑代碼中沒有發生任何事情。我被困因爲我無法證明,因爲上述問題:(

(Sry基因我的英文不好)

class Algorithms 
{ 
    public static <T> void mergeSort(final T[] a, final Comparator<T> c) 
    { 
     T[] list = a; 
     Comparator<T> comp = c; 
    } 
} 


public class Main 
{ 
    public static void main(String[] args) 
    { 
     int[] unsortedList = {4,5,7,1,98,32}; //Expected = 1,4,5,7,32,98 

     Comparator<Integer> sorted = Comparator.naturalOrder(); 
     int[] sortedList = Algorithms.mergeSort(unsortedList,sorted)) 
    } 
} 
+0

也沒有幫助,您期望從一個合併,這是一個無效方法的返回值。 – maccaroo

+0

是的,你是對的!我認爲這是在嘗試很多事情來解決問題時發生的......:D –

回答

3

在這段代碼中的我的代碼的功能,類型不匹配Algorithms.mergeSort呼叫:

int[] unsortedList = {4,5,7,1,98,32}; //Expected = 1,4,5,7,32,98 

Comparator<Integer> sorted = Comparator.naturalOrder(); 
Algorithms.mergeSort(unsortedList, sorted)) 

類型的unsortedListint[]和類型10是Comparator<Integer>。爲了使比賽的類型,你需要使用Integer[]unsortedList類型:

Integer[] unsortedList = {4, 5, 7, 1, 98, 32}; //Expected = 1,4,5,7,32,98 

另一個問題是,Algorithms.mergeSort返回void,所以這仍然不會編譯:

int[] sortedList = Algorithms.mergeSort(unsortedList, sorted); 

您需要刪除作業:

Algorithms.mergeSort(unsortedList, sorted); 

將其組合在一起,這將工作(你實現Algorithms.mergeSort後):

public static void main(String[] args) { 
    Integer[] unsortedList = {4, 5, 7, 1, 98, 32}; 

    Comparator<Integer> sorted = Comparator.naturalOrder(); 
    Algorithms.mergeSort(unsortedList, sorted); 
} 
+0

非常感謝您的詳細解答! :)現在我明白了爲什麼我必須使用Integer而不是int!祝你有美好的一天! :) –

2

使用的Integer[]代替int[]

+0

非常感謝!問題解決了..那簡單! –

0

另一種可能性也將是一個克隆工作:

class Algorithm 
{ 
    public static <T> T[] mergeSort(final T[] a, final Comparator<T> c) 
    { 
     T[] list = a.clone(); 
     Comparator<T> comp = c; 
     Arrays.sort(list, comp); 
     return list; 
    } 

    public static void main(String[] args) 
    { 
     Integer[] unsortedList = {4,5,7,1,98,32}; //Expected = 1,4,5,7,32,98 

     Comparator<Integer> sorted = Comparator.naturalOrder(); 
     Integer[] sortedList = Algorithm.mergeSort(unsortedList,sorted); 
    } 
} 
0

如果你只是想要的東西來編譯,你可以看看這個。有幾個問題:

  1. 試圖賦予mergeSort不起作用,因爲它是一個void方法。
  2. 目前你的mergeSort什麼都不做,你可能知道。
  3. 上面的答案是正確的,你需要使用整數。
  4. 存在多個語法問題,例如缺少分號和太多的元素。

    import java.util.Comparator; 
    
    class Algorithms 
    { 
        public static <T> void mergeSort(final T[] a, final Comparator<T> c) 
        { 
         T[] list = a; 
         Comparator<T> comp = c; 
        } 
    } 
    
    
    public class Main 
    { 
    
    public static void main(String[] args) 
    { 
        Integer[] unsortedList = {4,5,7,1,98,32}; //Expected = 1,4,5,7,32,98 
    
        Comparator<Integer> sorted = Comparator.naturalOrder(); 
        Algorithms.mergeSort(unsortedList,sorted); 
    } 
    }