交换滥用滥用?

问题描述 投票:1回答:2

以下是Java中的反向数组实现。我从逻辑上讲解了它,我觉得它应该可以工作。

public static int[] reverseArray(int[] arr){
int temp = 0;
int[] newArr;
newArr = Arrays.copyOf(arr, arr.length);
for (int i = 0; i < arr.length - 1; i++){
temp = newArr[i];
newArr[i] = newArr[arr.length - 1 - i];
newArr[arr.length - 1 - i] = temp;
}
return newArr;
}

我传入数组[1、2、3、4、5]它仅返回第一个到最后一个交换给我的信息。返回[5,2,3,4,1]

java swap
2个回答
3
投票

您一直循环到Array的末尾,这将导致您的逻辑失败。

您必须循环直到arr.length/2,而不是循环整个数组。循环遍历整个数组将使您的程序执行以下操作-

  • 交换元素并在循环的前半部分反转数组:现在,当循环到达索引-arr.length/2时,所有元素已被交换相互转换,并且您的Array也已反转。
  • 所有元素的重新交换都在循环的后半部分开始:这实际上开始将Array元素放回其原始位置。当循环到达索引arr.length - 1时,您的Array将恢复为原来的原始格式。

解决方案:

到达arr.length/2时只需停止循环,程序将正常运行。因此,您在reverseArray函数中的for循环应如下所示:

for (int i = 0; i < arr.length/2 ; i++)

1
投票

您两次交换元素。

在您的示例中,当i为1时,交换元素1和3。然后,当i为3时,交换元素3和1,有效地将它们放回原来的位置。

© www.soinside.com 2019 - 2024. All rights reserved.