Java程序:
int[] a = new int[] { 1, 2, 3, 4}
int N = a.length;
for (int i = 0; i < N/2; i++)
{
double temp = a[i];
a[i] = a[N-1-i];
a[N-i-1] = temp;
}
有人可以解释为什么N / 2进入for循环吗? 如果我干了它,最初用于: i = 0,0 <2 i = 1,1&lt; 2;
之后,for循环应该在数组{4,3,}处停止,因为当i = 2时,for循环被杀死。
请向我解释一下。
答案 0 :(得分:1)
要反转数组的顺序,可以简单地将数组分成两半,并交换距离中间相同距离的元素的位置。
例如,如果您有{ 1, 2, 3, 4, 5 }
,则中间将是3,而2和4距离中间的距离相同。如果您按照此模式开始交换,则将2与4和1交换为5.生成的顺序为{ 5, 4, 3, 2 , 1 }
。
可以使用for
循环来执行此操作,该循环迭代数组N/2
的一半长度,就像每个循环一样,只需要知道两个值,即当前位置的值i
,以及来自另一方的对手。这就是N-1-i
正在做的事情,它从数组的最后一个元素开始计数,而i
从头开始。
基本上a[i] = a[N-1-i]
和a[N-i-1] = temp
正在做的是使数组的第一个元素等于最后一个元素,最后一个元素等于第一个元素的原始值,并在下一个元素中循环第二个元素等于第二个最后一个元素等...它不需要继续检查N/2
之后的元素,因为它们已被更改。
答案 1 :(得分:1)
此示例中的for循环没有任何问题,它只会运行两次:i = 1
和N/2 = 2
;
4, 3, 2, 1
并且根据问题for循环执行i = 2,但是这不会发生。
尝试在for循环中添加print语句并计算打印语句出现次数,您将看到只有2.通过调试器运行代码也是一种选择。
修改后的最终输出:{{1}},这不是理想的结果吗?