反转循环说明

时间:2015-06-22 17:43:02

标签: arrays loops for-loop reverse

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循环被杀死。

请向我解释一下。

2 个答案:

答案 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 = 1N/2 = 2;

4, 3, 2, 1并且根据问题for循环执行i = 2,但是这不会发生。

尝试在for循环中添加print语句并计算打印语句出现次数,您将看到只有2.通过调试器运行代码也是一种选择。

修改后的最终输出:{{1}},这不是理想的结果吗?

相关问题