2013-10-14 223 views
0

我正在對二維數組進行排序並遇到一些問題。當我排序它開始爲第一對夫婦工作,並沒有完成。這是我的代碼,然後我將發佈我的輸出。sectionArray []的第一部分包含2個部分。在Section [] []的第二部分包含不同的學生對象。我需要按字母順序爲每個部分對這些對象的字符串名稱進行排序。按字母順序對二維數組進行排序

public void sortByName(){ 
    String temp; 
    for(int i = 0; i < 2; i++){ 
     for (int a = 0; a < sectionArray[i].length-1; a++){ 
      if (sectionArray[i][a].getName().compareToIgnoreCase(sectionArray[i][a+1].getName()) > 0){ 
       temp = sectionArray[i][a].getName(); 
       sectionArray[i][a].setName(sectionArray[i][a+1].getName()); 
       sectionArray[i][a+1].setName(temp); 

      } 
     } 
    } 

} 

輸出:

Progress Report 

Section 1 

Johnson 90.6 A 

Aniston 81.2 B 

Cooper_ 82.2 B 

Gupta__ 72.2 C 

Blair__ 52.2 F 

Section 2 

Clark__ 59.2 F 

Kennedy 63.4 D 

Bronson 90.0 A 

Sunny__ 84.8 B 

Smith__ 75.4 C 

Diana__ 68.8 D 

AFTER SORTING THE 2D ARRAY 

Progress Report 

Section 1 

Aniston 90.6 A 

Cooper_ 81.2 B 

Gupta__ 82.2 B 

Blair__ 72.2 C 

Johnson 52.2 F 

Section 2 

Clark__ 59.2 F 

Bronson 63.4 D 

Kennedy 90.0 A 

Smith__ 84.8 B 

Diana__ 75.4 C 

Sunny__ 68.8 D 
+1

發佈的輸入將是有益的 – Magnus

+0

有在你的第二個'for'週期一個錯誤,你沒有考慮數組的最後一個元素。你的泡泡分類是錯誤的。你只對數組做一次迭代,算法需要重做這個,直到數組沒有變化 - >數組被排序。按照答案中的建議更好地使用內置合併排序。 – Admit

回答

2

也許你可以只使用一個比較:

Arrays.sort(myList, new Comparator<Student>() { 
    @Override 
    public int compare(Student s1, Student s2) { 
     return s1.getName().compareTo(s2); 
    } 

}); 
+0

提示:您需要使用此代替第二個'for'循環 – Admit

+0

@jend我試過使用Arrays.sort方法,它不會工作,因爲我正在訪問對象的字符串。例如,當我這樣做「數組」時。排序(sectionArray [0]);」我得到這個錯誤「java.lang.ClassCastException:學生不能轉換爲java.lang.Comparable」 – edward

+0

要麼讓學生實現[可比較](http://docs.oracle.com/javase/6/docs/api/ java/lang/Comparable.html)接口或將一個比較器作爲第二個參數傳遞給Arrays.sort(...),就像我發佈的那樣。 – jend

相關問題