Peter
Peter

Reputation: 29

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

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

Answers (3)

A Paul
A Paul

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

user14838237
user14838237

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

Mureinik
Mureinik

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

Related Questions