2011-09-24 83 views
3

我必須編寫一個程序,它從命令行接受它的參數。有三類。主要的應用程序類,定義名人堂的每個成員的類,然後是名人堂的一個名人堂,它創建了一系列名人堂成員。 HallOFFameMember類的屬性是firstName,lastName,yearInducted和sport。我必須在HallOfFame類中編寫排序方法,根據引導年份排序。我試圖用類似的工具來解決它,但我認爲這不會起作用。家庭作業幫助。我必須「寫」排序我不能使用API​​排序

下面是說寫入排序的任務的一部分,所以我不能使用Array.sort()或類似的東西。

「在HallOfFame類中定義一個名爲sortMembers的方法,它返回一個HallOfFameMember對象的數組,該對象包含成員數組中的對象,並按歸納年進行排序注意:sortMembers方法中的排序應該不要使用API​​中的排序方法,你應該編寫自己的排序程序(冒泡排序,例如,可以接受)。「

我不確定如何去編寫數組中對象屬性的排序。任何幫助指導我到哪裏我可以找出如何做到這一點將不勝感激。我發現的一切都指向使用Array.sort和compareTo方法,我無法使用它。

**編輯**問題是有人可以指向我可以閱讀的地方,或找到如何編寫我自己的排序的例子,以通過對象數組中的屬性進行排序?不好意思看看使用可比較的建議,因爲這是我最初傾向於使用的,只是無法完成它的工作。

 public class HW3 { 


     public static void main(String[] args) throws Exception { 

      if (args.length % 4 != 0) { 
       throw new Exception(
         "First Name, Last Name, Year Inducted, Sport not entered correctly"); 
      } 

      HallOfFame hallOfFameList = new HallOfFame(); 
      hallOfFameList.setNumberOfMembers(args.length/4); 

      HallOfFameMember[] tempMembers = new HallOfFameMember[args.length/4]; 


      for (int i = 0; i < args.length; i += 4) { 
       tempMembers[i/4].setFirstName(args[i]); 
       tempMembers[i/4].setLastName(args[i+1]); 
       tempMembers[i/4].setYearInducted(Integer.parseInt(args[i+2])); 
       tempMembers[i/4].setSport(args[i+3]); 
      } 

      hallOfFameList.setMembers(tempMembers); 
      HallOfFameMember[] sortedMembers = null; 
      hallOfFameList.sortMembers(sortedMembers); 
      HallOfFame.printReport(sortedMembers); 


     } 


    } 



    public class HallOfFameMember { 
    private String firstName; 
    private String lastName; 
    private String sport; 
    private int yearInducted; 

    public String getFirstName() { 
     return firstName; 
    } 

    public void setFirstName(String firstName) { 
     this.firstName = firstName; 
    } 

    public String getLastName() { 
     return lastName; 
    } 

    public void setLastName(String lastName) { 
     this.lastName = lastName; 
    } 

    public String getSport() { 
     return sport; 
    } 

    public void setSport(String sport) { 
     this.sport = sport; 
    } 

    public int getYearInducted() { 
     return yearInducted; 
    } 

    public void setYearInducted(int yearInducted) { 
     this.yearInducted = yearInducted; 
    } 

    } 
     public class HallOfFame { 
private HallOfFameMember[] members; 
private int numberOfMembers; 

public HallOfFameMember[] getMembers() { 
    return members; 
} 

public void setMembers(HallOfFameMember[] members) { 
    this.members = members; 
} 

public int getNumberOfMembers() { 
    return numberOfMembers; 
} 

public void setNumberOfMembers(int numberOfMembers) { 
    this.numberOfMembers = numberOfMembers; 
} 

public void sortMembers(HallOfFameMember[] sortedMembers){ 


} 

public static void printReport(HallOfFameMember[] print){ 
    System.out.println("Java Sports Hall of Fame Inductees\n\n"); 
    System.out.printf("%-30s\t%-30s\t%-30s\n","Name","Year Inducted","Sport"); 
    for(int i = 0; i < print.length; i++) 
    System.out.printf("%-30s\t%-30s\t%-30s\n", print[i].getLastName()+","+print[i].getFirstName(), print[i].getYearInducted(), print[i].getSport()); 
    } 

} 
+1

問題是什麼? – quasiverse

+1

你可以使用CompareTo,或者更好的比較器,但是你必須使用你自己的排序方法。我會在不同的排序算法上檢查維基百科,然後用最簡單的方式實現,或許是Bubble Sort。我會使用Comparable或Comparator,然後在我的排序方法中調用它們的方法(compareTo或分別比較)。 –

+1

另外:投票,因爲你表明這是家庭作業,你不是要求直接的答案,而是解釋任務的建議。 –

回答

5

爲了擴大對我的評論的發言:

因爲這是家庭作業,我們大多數人會限制我們的建議了一些,但我們可以幫你解釋的分配。我在指令中沒有看到任何內容阻止您使用Comparator<HallOfFameMember>或實現Comparable<HallOfFameMember>,事實上我會做其中一個。

但是你必須編寫你自己的排序方法,我會這樣做,讓它使用Comparator幫助器類或Comparable接口來幫助排序。我會去維基百科,閱讀排序算法,並選擇最簡單的,也許是冒泡排序,因爲你沒有對這個任務進行速度分級,只是把它完成並正確地完成。

+0

好的。我已經整理出來了,所以我想。但是我有一個新問題。將發佈新帖子,因爲它與排序/比較無關。 Tyvm尋求幫助。 – Zankorel

+0

不客氣。 –