You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于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)的含义

  1. start和end是数组索引:没错,它们代表数组的下标位置,不是元素值。比如数组[2,7,6,9],索引从0开始,初始start=0(对应元素2),end=3(对应元素9)。
  2. 循环条件的作用:确保我们只交换数组前半部分和后半部分的对应元素,直到两个索引相遇或交叉就停止循环——此时数组已经完成反转,再继续交换会把已经换好的元素又换回去,做无用功甚至出错。

三、用[2,7,6,9]的例子一步步演示

初始数组:[2,7,6,9],初始start=0,end=3

  1. 第一次循环(start=0 < end=3):
    • temp = arr[0] → temp=2
    • arr[0] = arr[3] → 数组变为[9,7,6,9]
    • arr[3] = temp → 数组变为[9,7,6,2]
    • 随后start++变成1,end--变成2
  2. 第二次循环(start=1 < end=2):
    • temp = arr[1] → temp=7
    • arr[1] = arr[2] → 数组变为[9,6,6,2]
    • arr[2] = temp → 数组变为[9,6,7,2]
    • 随后start++变成2,end--变成1
  3. 此时start=2不小于end=1,循环终止,数组已经是反转后的结果[9,6,7,2]

内容的提问来源于stack exchange,提问作者debloat god

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 11:26:21