关于Java数组反转代码中temp变量及start<end条件的疑问
数组反转的交换逻辑与循环条件解析
一、三元交换(temp临时变量交换)的逻辑
你看到的这段代码是标准的变量交换逻辑,核心是用temp临时变量保存被覆盖前的值,避免数据丢失:
temp = arr[start]; arr[start] = arr[end]; arr[end] = temp;
- 第一步
temp = arr[start]:先把arr[start]的原始值存到临时变量temp里,相当于备份。 - 第二步
arr[start] = arr[end]:这时候把arr[end]的值赋给arr[start],虽然此时arr[start]和arr[end]暂时相同,但我们已经用temp保存了arr[start]的原始值,不会丢失。 - 第三步
arr[end] = temp:把备份的原始arr[start]值赋给arr[end],完成两者的交换。
如果没有temp直接交换,比如先写arr[start] = arr[end]再写arr[end] = arr[start],那arr[end]最后得到的是已经被覆盖后的arr[start]值,等于没交换——这就是temp的关键作用:保存中间值,防止数据被覆盖丢失。
二、while (start < end)的含义
- start和end是数组索引:没错,它们代表数组的下标位置,不是元素值。比如数组
[2,7,6,9],索引从0开始,初始start=0(对应元素2),end=3(对应元素9)。 - 循环条件的作用:确保我们只交换数组前半部分和后半部分的对应元素,直到两个索引相遇或交叉就停止循环——此时数组已经完成反转,再继续交换会把已经换好的元素又换回去,做无用功甚至出错。
三、用[2,7,6,9]的例子一步步演示
初始数组:[2,7,6,9],初始start=0,end=3
- 第一次循环(
start=0 < end=3):temp = arr[0]→ temp=2arr[0] = arr[3]→ 数组变为[9,7,6,9]arr[3] = temp→ 数组变为[9,7,6,2]- 随后
start++变成1,end--变成2
- 第二次循环(
start=1 < end=2):temp = arr[1]→ temp=7arr[1] = arr[2]→ 数组变为[9,6,6,2]arr[2] = temp→ 数组变为[9,6,7,2]- 随后
start++变成2,end--变成1
- 此时
start=2不小于end=1,循环终止,数组已经是反转后的结果[9,6,7,2]
内容的提问来源于stack exchange,提问作者debloat god
相关产品推荐
相关产品推荐

