2014-10-29 458 views
-1

到目前爲止,我有使用[]運算符時爲什麼會出現編譯錯誤?

public static void sort(Collection<Integer> l1){ 
Iterator<Integer> it = l1.iterator(); 
while(it.hasNext()){ //meant to be for(int i; i<l1.size(); i++) 
    if(l1[i] < l1[i+1]){ 
     l1[i] = l1[i+1]; 
     l1[i+1] = l1[i]; 
    } 

} 

我得到我的錯誤在我的if語句。

+1

這是因爲Java允許[]運算符只用於內置數組,如'new Integer [14]'。此外,'l1'是一個集合,它是(不像一個列表)沒有排序,所以排序它是沒有意義的。 我建議先通過一些Java基礎教程。 – 2014-10-29 09:49:09

+1

方括號語法不適用於Java中的集合。另外,不是每個集合都適合您的任務 - 您需要精確定製的集合。使用帶有['.get(int)'](http://docs.oracle.com/javase/7/docs/api/java/util/List.html#get(int))方法的列表和訪問元素,而不是方形的breckets。 – bsiamionau 2014-10-29 09:49:43

+1

瞭解Array和ArrayList之間的區別 它們在java中是兩個不同的東西 – 2014-10-29 10:03:11

回答

2

有在你的代碼的幾個誤區:

  1. 一個Collection不能作爲數組([i]符號)來訪問。您已使用Iterator進行適當的遍歷。在遍歷時使用它來訪問這些值。
  2. 在該循環中訪問[i+1]它具有定義的最終條件的方式很可能會拋出ArrayIndexOutOfBoundsException
  3. 你提到你需要返回一個新的列表,但你似乎試圖重新排列在同一個l1Collection中的元素。
  4. 不知道,如果它在你的代碼中省略了,但你沒有定義的引用變量i,也是最重要的,在整個循環迭代保持其價值。注意這個變量不是必需的,因爲你已經使用迭代器遍歷了Collection

我建議

  1. 遍歷原來Collection因爲你已經做。請記住使用iterator.next()實際上使Iterator繼續前進並實際檢索值。
  2. 將每個值插入到新列表中,但不僅僅在最後(使用add(item))。尋找它應該進入(例如用whilefor迭代循環的話),並使用List#add(int, E)新元素拖放到它的地方轉移下列元素右側的位置的位置。這樣,這個新的List將保證始終有序。
  3. 閱讀收藏和循環,並從Oracle的Java教程一個好的java教程,例如The Collection InterfaceLanguage Basics: The while statement可能是一個很好的起點。

只給一個起點/骨架,這裏是它如何可能看起來像一個大綱:

public static Collection<Integer> sort(Collection<Integer> l1){ 
    List<Integer> sortedList = new ArrayList<Integer>(); 
    for (Iterator<Integer> it = l1.iterator(); it.hasNext();) { 
     Integer currentValue = it.next(); 

     // Look into sortedList the position where currentValue should go into 
     int pos = 0; 
     for (int i=0;i<sortedList.size();i++) { 
      // Compare currentValue with sortedList.get(i) 
      // to know if i is the right position for currentValue. 
      // If it is, assign it to pos 
     } 
     sortedList.add(pos, currentValue); 
    } 
    return sortedList; 
} 
0

在一審中,迄今爲止的意見是正確的。您不能像使用數組那樣使用Collection。如果你聲明

public static void sort(List<Integer> l1) 

然後toArray()方法可以用來獲得數組。

其次,報表

l1[i] = l1[i+1]; 
    l1[i+1] = l1[i]; 

不可能工作,你會含有相同值的元素都結束了。

第三,我建議您將「快速排序」算法念起來和執行......這是不是所有的困難。下面是一個鏈接:http://www.vogella.com/tutorials/JavaAlgorithmsQuicksort/article.html

相關問題