将第一个数组元素与最后一个交换,第二个与倒数第二个交换,依此类推

Swapping first array element with last, second with second last and so on

我有一个数组,我必须在其中交换第一个值和最后一个值,第二个值和倒数第二个值,依此类推。

我试过像下面的代码那样做,但它只工作了一半,用零替换了另一半。有人可以解释这里有什么问题吗?

for (i = 0; i < arr.length; i++) {
    temp = arr[i];
    arr[i] = arr[arr.length - 1 - i];
    arr[arr.length - 1 - i] = temp;
}

你的想法是对的,但是你在遍历整个数组,所以你切换了第一个和最后一个元素,然后在到达最后一个元素时再次返回(并且每一对都有相同的问题开关元件)。当你到达一半点时你应该停止循环:

for (i = 0; i < arr.length / 2; i++) { // Here!
     temp = arr[i];
     arr[i]  = arr[arr.length - 1 - i];
     arr[arr.length - 1 - i] = temp;
}

如果你想反转整个数组,你可以在下面做,但是 java 中的 Collections 类 也可以做到。您可能想使用第二个数组,查看下面的示例

String arr[] = {"1", "2", "3", "4", "5"};
String temparr[] = new String[arr.length];
System.out.println(Arrays.toString(arr));
for (int i = 0; i < arr.length; i++) {
    temparr[i] = arr[arr.length - i - 1];
}
System.out.println(Arrays.toString(temparr));

正确的做法是从头到尾遍历这个数组,交换元素ilength-i-1,即。 e.第一个和最后一个,第二个和第二个等等:

int[] arr = {1, 4, 6, 5, 23, 3, 2};

IntStream.range(0, arr.length / 2).forEach(i -> {
    int temp = arr[i];
    arr[i] = arr[arr.length - i - 1];
    arr[arr.length - i - 1] = temp;
});

System.out.println(Arrays.toString(arr));
// [2, 3, 23, 5, 6, 4, 1]

如果你继续从中间迭代到最后,你将它们交换回来:

IntStream.range(arr.length / 2, arr.length).forEach(i -> {
    int temp = arr[i];
    arr[i] = arr[arr.length - i - 1];
    arr[arr.length - i - 1] = temp;
});

System.out.println(Arrays.toString(arr));
// [1, 4, 6, 5, 23, 3, 2]

另请参阅:
Is there any other way to remove all whitespaces in a string?
Is there a way to reverse specific arrays in a multidimensional array in java?