繁体   English   中英

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

[英]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 ,即第一个和最后一个,第二个和第二个倒数等等:

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 的多维数组中反转特定的arrays?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM