我有一个数组,在这里我必须用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; }
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));
33qvvth12#
正确的方法是从开始到中间遍历这个数组并交换元素 i 以及 length-i-1 ,即。e。第一个和最后一个,第二个和第二个,依此类推:
i
length-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中,有没有一种方法可以反转多维数组中的特定数组?
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; }
3条答案
按热度按时间13z8s7eq1#
如果要反转整个数组,可以执行以下操作,但是java中的collections类也可以这样做。您可能需要使用第二个数组,请检查下面的示例
33qvvth12#
正确的方法是从开始到中间遍历这个数组并交换元素
i
以及length-i-1
,即。e。第一个和最后一个,第二个和第二个,依此类推:如果继续从中间到结尾进行迭代,则将它们交换回来:
另请参见:
•是否有其他方法删除字符串中的所有空白?
•在java中,有没有一种方法可以反转多维数组中的特定数组?
bq8i3lrv3#
你的想法是正确的,但是你要遍历整个数组,所以你要切换第一个和最后一个元素,然后在到达最后一个元素时再切换回来(并且每对切换的元素都有相同的问题)。当到达半个点时,应停止循环: