过去一个月我正在学习Java
。我很难理解这一行
for(int i = 0;i<list.length-1;i++){
任何人都可以用外行来解释我。我是一个慢学习者。我理解循环,但这件事我无法理解
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;
}
}
}
答案 0 :(得分:3)
我们考虑一个数组
0 1 2 3 4 5 6 7 8 9 <-- array indexes
_ _ _ _ _ _ _ _ _ _
| | | | | | | | | | |
第for(int i = 0;i<list.length-1;i++){
行告诉您要从0
迭代到lenght - 2
。在我的示例中,长度为10,因此您将从0
迭代到8
。
这样做的原因是为了避免OutOfBoundsException
这一行list[i] > list[i+1]
中的i
,其中i+1
- 索引与i = 8
- 索引。在最后一次迭代中,它将是i + 1 = 9
和{{1}}(这是我的数组的最后一个索引)。
答案 1 :(得分:1)
您的代码将遍历此for循环中的所有list.entries。
如果位置i的list.entry大于位置i + 1的list.entry 你将list.entry保存在临时的位置i 然后你将在位置i的实际列表中的第i + 1位保存更大的list.entry。 你的列表[i + 1]获得较小的temp值(你在开头保存) 之后你设置swap = true ...可能是为了知道你换了i和i + 1
如果swap不成立,则while循环完成,因为您的列表已排序
答案 2 :(得分:0)
第5行的循环用于比较所有可能的数字对。 while循环用于选择第一个成员,而for循环用于选择第二个成员。
答案 3 :(得分:0)
你有一个大小为6的数组,即索引0-5。 for循环以索引0开始,并使用索引1检查索引0处的元素。如果索引0大于索引1,则交换这两个值。类似地,它检查直到索引4(i = 4)并且达到索引5(i + 1),因为这将是数组索引的结束,即你将检查数组中的最后两个元素(因为数组索引)从0开始。如果你超越i = 4,你将检查5和6(你的数组中不存在,并将抛出OutOfBoundsException)。
答案 4 :(得分:0)
for(int i = 0;i<list.length-1;i++){
浏览列表中的项目。您正在使用list [i]访问每个项目。 (第一项有索引0(列表[0])。 i 在循环开始时将为零(0),然后每次迭代将增加一(i ++) ;它会增加到中间表达
i<list.length-1`)
拟合 i 。
因此,在您的情况下,它将通过项目(您可以看到列表中有6个)。最后一项有索引5列表[5]。这就是为什么你在list.length-1
中有-1