2014-09-05 65 views
-4

我在介紹Java課程,我只是想通過一些練習領先於曲線,所以我正在製作一個泡沫排序程序。出於某種原因,它只會穿過外部循環兩次。Java Bubble排序迭代只有兩次

public ArrayList SortArray(ArrayList<Integer> u) { 
    int temp; 
    int spot; 
    for (int isOrdered = 1; isOrdered == 1;) { 
     for (spot = 0; spot < u.size() - 1; spot ++) { 
      System.out.println(u.get(spot) + " " + u.get(spot + 1) + " " + spot); 
      if (u.get(spot) > u.get(spot + 1)) { 
       temp = u.get(spot + 1); 
       u.set(spot + 1, u.get(spot)); 
       u.set(spot, temp); 
       isOrdered = 1; 
      } 
      else { 
       isOrdered = 0; 
      } 
     } 
    } 
    return u; 
} 

據我所知道的,所發生的事情是在第二次迭代之後,它不會重置「發現」爲0,因此不會通過循環再次運行。有任何想法嗎?

+5

只要內部循環退出時'isOrdered'設置爲0,外部循環將退出。只要數組的最後兩個元素已經就緒,就會發生這種情況。你需要回到你的邏輯繪圖板。 – 2014-09-05 03:01:21

+1

您應該嘗試使用調試器並逐步完成代碼 – dehrg 2014-09-05 03:06:01

+0

您是否可以將您的示例輸入發佈到您的數組列表中 – 2014-09-05 03:06:46

回答

0

那麼,對於初學者來說,這是一種...使用for循環實現while循環的不尋常方式。嘗試使用布爾值isOrderedwhile(!isOrdered)來表示類似的語句。

正如Ted Hopp的評論所言,你的邏輯並不完全正確。你的代碼正在做的是,它會對列表中的一個值進行排序,一旦該值「冒泡」,你的標誌被設置爲true。

你需要你的外部循環的條件是,它保持運行,直到所有單元格按順序。

現在你的旗幟簡單地說它是排序的,當你已經完成列表時,但是當它通過列表而沒有執行交換時,它需要做的是真實的。

試着實現這一點,如果你看不到,那麼如果你不能得到它(我假設你有興趣自己做,因爲你在你的課堂上工作),看看示例here