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,因为你实际上不需要通过所有值,如果你切换一半,你切换所有值。
我根本不了解接下来的两行。
提前致谢。
答案 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个元素。
也就是说,我们迭代数组的前半部分,用数组的后半部分中的相反元素交换元素。换句话说,我们正在颠倒阵列。