2013-10-14 171 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

相关问题