JAVA数组 - 需要有人解释这段代码的作用吗?

时间:2014-11-19 23:42:23

标签: java

int temp; 
for (int i = 0; i < numbers.length/2; i++) {
    temp = numbers[i];
    numbers[i] = numbers[numbers.length - 1 - i];
    numbers[numbers.length - 1 - i] = temp; 

所以这是我的一个实验室中的代码,但我不理解它。

首先你声明int temp,但为什么呢?你不应该声明一个临时int数组吗?

然后第二行是一个循环,它通过索引和你/ 2,因为你实际上不需要通过所有值,如果你切换一半,你切换所有值。

我根本不了解接下来的两行。

提前致谢。

4 个答案:

答案 0 :(得分:1)

小心地穿过循环内部几次:

temp = numbers[i]; 
numbers[i] = numbers[numbers.length - 1 - i]; 
numbers[numbers.length - 1 - i] = temp

在你第一次传球时我是0

所以从这样的数组开始:

[1,2,3,4,5]

如果temp = numbers [0]则temp将为1. numbers.length将为5,所以numbers.length-1-i将为4. number [4]为5.完成每一行后,重复i = 1然后i = 2。完成后检查你的阵列(它会改变)。

继续这样做。最好自己解决问题而不是交出答案 - 更有趣:)

答案 1 :(得分:0)

(1)你声明int temp来存储在数组中交换的变量的值,所以当你覆盖其中一个数组元素时,你仍然有变量值。您不需要为此使用整个数组。

(2)您不理解的代码使用temp作为占位符,将数组值交换为数字[i]和数字[numbers.length - 1 - i]。

答案 2 :(得分:0)

所有这些代码都是反向数组。它一直到array.length / 2(另一方面,如果它达到它将交换的长度,然后交换回做什么)。

temp并不需要是一个数组,因为它只是一个变量,可以在交换发生时保留旧值。

代码的最后两行是交换实际发生的地方。

因此,如果你提供{1,2,3,4,5}的输入,它将输出{5,4,3,2,1}。

如果你看i = 0:

数字[0] = 1,数字[4] = 5,

temp将变为1,则数字[0]将变为5,则数字[4]将变为temp(1)的值。

所以在循环的第一次迭代之后,你的数组将如下所示:

{5,2,3,4,1}

答案 3 :(得分:0)

不要过于担心宣言。让我们专注于您根本无法理解的路线。循环内的三行如下:

temp = numbers[i];

这会将数组的第i个元素的值放入temp(所以我们稍后可以使用它)。

numbers[i] = numbers[numbers.length - 1 - i];

这将第i个元素的值从末尾放入第i个元素。

numbers[numbers.length - 1 - i] = temp;

这会将第i个元素的原始值从末尾放入第i个元素。

也就是说,我们迭代数组的前半部分,用数组的后半部分中的相反元素交换元素。换句话说,我们正在颠倒阵列。