Arrays 循环解释的反转
Java程序:Arrays 循环解释的反转,arrays,loops,for-loop,reverse,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; } int[]a=新的int[]{1,2,3,4} int N=a.长度; 对于(int i=0;i
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;
}
int[]a=新的int[]{1,2,3,4}
int N=a.长度;
对于(int i=0;i
有人能解释为什么N/2出现在for循环中吗?
如果我干运行它,最初用于:
i=0,0要反转数组的顺序,只需将数组一分为二,然后交换距中间相同距离的元素的位置 例如,如果有
{1,2,3,4,5}
,则中间将是3,而2和4与中间的距离相同。如果按照此模式开始交换,则将2与4交换,1与5交换。结果的顺序是{5,4,3,2,1}
可以使用迭代数组长度一半的N/2
的for
循环来实现这一点。对于每个循环,只需要知道两个值,当前位置i
的值和另一侧的对应值。这就是N-1-i
所做的,它从数组的最后一个元素开始计数,而i
从开始计数
基本上,
a[i]=a[N-1-i]
和a[N-i-1]=temp
所做的是使数组的第一个元素等于最后一个元素,最后一个元素等于第一个元素的原始值,在下一个循环中,第二个元素等于最后一个元素的第二个元素,等等。。。它不需要在N/2
之后继续检查元素,因为它们已经被更改了。在本例中,for循环没有问题,它只会运行两次:fori=0
和i=1
N/2=2
根据i=2执行循环的问题,但这不会发生
尝试在for循环中添加print语句并计算print语句出现的次数,您将看到只有2个。通过调试器运行代码也是一个选项
修改后的最终输出:
4,3,2,1
,这不是期望的结果吗?如果数组的大小是奇数,该怎么办?@GeethWijewickrama在上面的示例中,数组有5个元素。5除以2=2.5。因为N
是一个int
,所以它会丢弃小数部分,导致N=2
。循环将迭代直到i=1
,这意味着在此算法中,它将交换除中间元素以外的所有元素。中间不必交换,因为它是在中间,那么它是什么时候呢?如果数组是{1,2,3,4},那么这里的n/2值将是2。那么交换是如何进行的。同样,将迭代直到i=1
,用4交换1,用3交换2,然后停止。该算法并不真正“知道”是否存在中间值,它只是将数组分成两等分,并交换相应的值。