2011-09-24 43 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

不客气。 –