2014-02-21 210 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