Java中的逆向数组代码解释
有人能解释一下下面代码中每一行的作用吗?我基本上把-1和-I搞混了
还有,我们可以反转没有临时值的数组吗
for (int i = 0; i < numbers.length / 2; i++) { // why divide by 2
int temp = numbers[i];
numbers[i] = numbers[numbers.length - 1 - i];// what this does?
numbers[numbers.length - 1 - i] = temp;`i];
numbers[numbers.length - 1 - i] = temp;
# 1 楼答案
简单地说,这个循环是交换数组中值的位置
例如,以这个数组
[1, 2, 3, 4]
为例循环首先将
i
处的元素设置为变量temp
。 然后,数组末尾的数字减去我们前进了多少次迭代/位置(i
),被设置为数组的当前位置(i
),从而替换1
。换言之,它会从自身中选择距离最远且尚未交换的元素。紧接着,temp
被设置为4
的旧位置第一次迭代使数组看起来像
[4, 2, 3, 1]
第二次迭代使数组看起来像
[4, 3, 2, 1]
现在阵列反转。但请注意,我们只迭代了数组长度的一半。不需要继续迭代,如果我们再进一步,就会得到一个数组越界错误
(之所以使用
-1
,是因为.length
返回数组中从1开始计数的元素数。)