2013-03-14 33 views
-1

我不知道如何正確輸入這個內容,但我被告知要編寫一個方法來返回最大的課程對象(該課程的學生人數最多)。如果有兩門課程具有相同數量的學生,則會返回兩者。從沒有ArrayList的函數中返回兩個對象

問題的第二部分是什麼麻煩我,因爲我不允許另一個ArrayList除了他指定的(已經使用)之外。有沒有辦法跟蹤兩個+對象而不使用列表/散列?

這是我到目前爲止所做的,但它只返回一個課程對象。

public Course largestEnrollment(){ 
    int size = 0; 
    Course p = null; 
    for (Integer c : courseList.keySet()){ 
     if (courseList.get(c).getClassList().size() > size){ 
      p = courseList.get(c); 
      size = courseList.get(c).getClassList().size(); 
     } 
     return p;    
    } 
    return null;   
} 
+2

嗯...使用數組? – 2013-03-14 19:41:09

+1

Course []或迭代器。很大程度上取決於問題中限制的確切用詞。 – 2013-03-14 19:42:53

+0

我會請你的教授澄清他們想要返回的是什麼。一般來說,我希望他們提供函數簽名('public Course largestEnrollment()'部分)。 – 2013-03-14 19:43:50

回答

2

返回Course對象的數組:

public Course[] largestEnrollment(){ 

你需要決定如何處理你的for循環內的數組。

1

根據尺寸對ArrayList排序。然後,您可以返回最大課程的sub-list

1

如果你沒有那麼多Course(例如< 1K),你可以實現Comparable或寫ComparatorCourse對象。因此,您只需從地圖中獲取集合中的所有值(課程),然後對排序集合中的集合進行排序,然後對這些元素進行相同值(大小)的排序。

我提到了收集的大小,因爲排序使O(n)問題變成了O(nlogn)。但是,如果規模很小,這是一個方便的途徑。

無論如何,您必須將方法返回類型更改爲集合或數組。

1

排序,然後返回一個子表:

public List<Course> largestEnrollment(List<Course> courses) { 
    Collections.sort(courses, new Comparator<Course>() { 
     @Override 
     public int compare(Course o1, Course o2) { 
      return o1.getClassList().size() - o2.getClassList().size(); 
     } 
    }); 
    for (int indexOfLargest = 1; indexOfLargest < courses.size(); indexOfLargest ++) { 
     if (courses.get(indexOfLargest - 1).getClassList().size() > courses.get(indexOfLargest).getClassList().size()) 
      return courses.subList(0, indexOfLargest); 
    } 
    return courses; 
}