java—交换第一个数组元素和第二个数组元素,以此类推

h4cxqtbf  于 2021-06-29  发布在  Java
关注(0)|答案(3)|浏览(531)

我有一个数组,在这里我必须用last交换第一个值,用second交换第二个值,依此类推。
我试着像下面的代码那样做,但它只起到了一半的作用,用零替换另一半。有人能解释一下这里怎么了吗?

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

13z8s7eq1#

如果要反转整个数组,可以执行以下操作,但是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));
33qvvth1

33qvvth12#

正确的方法是从开始到中间遍历这个数组并交换元素 i 以及 length-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]

另请参见:
•是否有其他方法删除字符串中的所有空白?
•在java中,有没有一种方法可以反转多维数组中的特定数组?

bq8i3lrv

bq8i3lrv3#

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

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;
}

相关问题