2013-08-24 116 views
0
public class WordArray { 
     public char[] str; 
     public int[] index; 
} 

這是存儲字的字符數組str排序在java中的對象數組?

public class DuplicateArray { 
    WordArray wordArray[]; 
    int size; 

    public static DuplicateArray getDupArray(int size , String string[]){ 
     DuplicateArray da = new DuplicateArray(); 
     da.size = size; 
     da.wordArray = new WordArray[da.size]; 
     for (int i = 0; i < da.size; i++) { 
      da.wordArray[i] = new WordArray(); 
      da.wordArray[i].str = new char[string[i].length()]; 
      da.wordArray[i].index = new int[da.size]; 
      da.wordArray[i].str = string[i].toCharArray(); 
      da.wordArray[i].index[i] = i;  
     } 
     return da; 

    } 
} 

該類使用WordArray類和複製來自字符串數組string 的個別單詞的字符str陣列中的每個wordArray[i]在一個類。

首先,我想對存儲在wordArraystr中的單個字符進行排序。

然後我想對wordArray中的每個單詞進行排序,但是我想保留string中單詞的原始索引以備後用。 對於我使用這個類:發生在ComparableTimsort什麼

但類種姓例外,對此,我也沒辦法。 從我在前面的問題中讀到的內容中,我們必須重寫compareTo。 但我不知道在哪裏重寫它,我是否應該在PrintAnagram類中重寫它,我實際上正在分類中,還是應該在WordArrayDuplicateArray中覆蓋它。如果任何人有時間來解釋這個東西,那麼請或者你可以指點我的一些資源,這一切都清楚地解釋。我對Java相當陌生。

例外:

Exception in thread "main" java.lang.ClassCastException: self.study.WordArray cannot be cast to java.lang.Comparable 
    at java.util.ComparableTimSort.countRunAndMakeAscending(ComparableTimSort.java:290) 
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:157) 
    at java.util.ComparableTimSort.sort(ComparableTimSort.java:146) 
    at java.util.Arrays.sort(Arrays.java:472) 
    at self.study.PrintAnagram.printAnagram(PrintAnagram.java:13) 
    at self.study.AnagramTogether.main(AnagramTogether.java:7) 
+0

你應該看看http://stackoverflow.com/questions/683041/java-how-do-i-use-a-priorityqueue – Joren

+0

你會在WordArray覆蓋的compareTo。它必須知道如何將自己與另一個WordArray進行比較,並確定哪個是「更大」的等等。 –

+0

引用Arrays.sort的文檔:按照其自然順序將指定的對象數組按升序排序元素。 **數組中的所有元素都必須實現Comparable接口**。此外,數組中的所有元素必須相互可比(即e1.compareTo(e2)不得爲數組中的任何元素e1和e2拋出ClassCastException)。 –

回答

2

你的類WordArray應實現的接口Comparable使用Arrays.sort功能進行排序。

所以WordArray的簽名應該是這樣的:

public class WordArray implements Comparable<WordArray> 

和類應該實現的方法:

public int compareTo(WordArray compareWordArray) 

或者你應該提供明確的實施Comparator接口來sort方法。

詳情請見this

2

就像@Rahaman說的。

或者您可以將比較器定義爲第二個參數。

Arrays.sort(da.wordArray, comparator);