2014-02-21 167 views
0

我正在學習過去一個月的Java。我很難理解這條線java冒泡排序問題

for(int i = 0;i<list.length-1;i++){ 

有沒有人可以用外行人來解釋我lang。我是一個緩慢的學習者。我理解循環,但這件事我不明白

Int[]list = {5͵7͵54͵34͵87͵44}; 

boolean swap = true; 
int temp; 
while(swap){ 
    swap = false; 
    for(int i = 0;i<list.length-1;i++){ 
     if(list[i] > list[i+1]){ 
      temp = list[i]; 
      list[i] = list[i+1]; 
      list[i+1] = temp;     
      swap = true; 
     } 
    } 
} 
+1

你的問題不清楚。如果你明白* for'循環,那究竟是什麼問題?還要注意'Int'在Java中無效,應該是'int'。 – Maroun

+1

當你說第5行時,你的意思是整個for循環嗎? – ForgetfulFellow

+1

@Cataclysm你爲什麼這麼認爲? – Maroun

回答

0

第5行循環用於比較所有可能的數字對。 while循環用於選擇第一個成員,for循環用於選擇第二個成員。

+0

不是這不是這條線。看看原來的帖子(沒有編輯) – UmNyobe

1

您的代碼正在經歷for循環中的所有list.entries。

如果您list.entry在位置我是在位置i + 1 您保存list.entry位置i在臨時 那麼你是在位置i + 1節省更大list.entry比list.entry大在您位置i的實際列表中。 您的列表[i + 1]正在獲取較小的temp值(您在開始時保存的值) 之後,您設置了swap = true ...可能爲了解您交換了i和i + 1

如果交換是不是真的while循環做,因爲你的列表進行排序

+0

這是有益的...很酷 –

3

讓我們考慮一個數組

0 1 2 3 4 5 6 7 8 9 <-- array indexes 
_ _ _ _ _ _ _ _ _ _ 
| | | | | | | | | | | 

for(int i = 0;i<list.length-1;i++){告訴你,你要遍歷從0lenght - 2。在我的示例中,長度爲10,因此您將從0重複爲8

其原因是爲了避免此行中的OutOfBoundsExceptionlist[i] > list[i+1]您將i第012個索引與第012個索引中的第i+1個索引進行比較。在最後一次迭代中,它將是i = 8i + 1 = 9(這是我的數組的最後一個索引)。

+0

非常感謝,先生,現在我明白了... –

+0

@ user3336241沒問題,不要忘記接受解決您的問題的答案。 –

0

您有一個大小爲6的數組,即索引0-5。您的for循環以索引0開始,並使用索引1檢查索引爲0的元素。如果索引0大於索引1,則交換這兩個值。同樣,它會檢查直到索引4(i = 4)和索引5(i + 1)到達,因爲這將是數組索引的末尾,即您將檢查數組中的最後兩個元素(因爲數組索引從0開始)。如果超出i = 4,你將檢查5和6(它不存在於你的數組中,並且會拋出一個OutOfBoundsException)。

0
for(int i = 0;i<list.length-1;i++){ 

列表經過項目。您正在使用列表[i]訪問每個項目。 (第一個項目的索引爲0(list [0])i在循環開始時將爲零(0),然後每次迭代將增加1(i ++);它會增加到中間表達

i<list.length-1`) 

裝修

所以你的情況它會經過的物品(你在你的名單有6個,你可以看到),最後一個項目的索引5列表[ 5]。這就是爲什麼你在列表中有-1。-1