Reputation: 29
I have an array, where I have to swap the first value with last, second with second last, and so on.
I tried doing it like in the code below, but it only works halfway, replacing the other half with zeros. Could somebody explain what is wrong here, please?
for (i = 0; i < arr.length; i++) {
temp = arr[i];
arr[i] = arr[arr.length - 1 - i];
arr[arr.length - 1 - i] = temp;
}
Upvotes: 1
Views: 4220
Reputation: 8251
If you want to reverse the whole array, you can do below, but Collections classes in java can do it too. You may want to use a second array, check below example
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));
Upvotes: 1
Reputation:
Correct approach is to iterate over this array from beginning to the middle and swap elements i
and length-i-1
, i. e. first and last, second and second last and so on:
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]
If you continue iterating from middle to the end, you swap them back:
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]
See also:
• 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?
Upvotes: 0
Reputation: 311053
You have the right idea, but you're iterating over the whole array, so you switch the first and the last elements, and then back again when you reach the last one (and have the same issue for every pair of switched elements). You should stop the loop when you reach half point:
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;
}
Upvotes: 3