Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to reverse slice of array java

I’ve been attempting to reverse a slice of a list in java.

The equivalent in python (though perhaps not the best way – I don’t care about this, just want to get my point across) would be:

myList = [0,1,2,3,4,5,6,7,8,9,10]
reverseSlice = myList[2:6]
reverseSlice.reverse()
myList[2:6] = reverseSlice

When I tried to manually implement this in Java, I tried this:

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

 public static int[] reverse(int[] x,int a1, int a2) {
    
    a1--;
    
    int[] rArr = new int[a2-a1+1];
    
    for (int ind = a1; ind<a2; ind++) {
        rArr[a2-ind-1] = x[ind];
    }
    
    for (int ind = a1; ind<a2; ind++) {
        x[ind] = rArr[ind];
    }
    
    return x;
    
}

However, when I run this:

int[] cows1 = new int[]{0,1,2,3,4,5,6,7,8,9,10};
        
cows1 = reverse(cows1,2,6);
        
for (int i : cows1) {
    System.out.print(i + " ");
}

I get 0 4 3 2 1 0 6 7 8 9 10 .

I’m really confused how I got this, as in my function, I don’t introduce new values, so the "0" shouldn’t have appeared.

My Question: Why is my code returning values that are not in the list?

>Solution :

The 0 value which is coming might be because of accessing an uninitialized value from rArr array. For the purpose of reversing, an extra array is not required. You can simply swap the values from the starting index to the end index. I have tested the following code and it gives correct output

 public class Solution2 {
    
    public static void main(String args[])
    {
        int[] cows1 = new int[]{0,1,2,3,4,5,6,7,8,9,10};
        
        cows1 = reverse(cows1,2,6); 
        // both indices are inclusive 
                
        for (int i : cows1) {
            System.out.print(i + " ");
        }
    }
     public static int[] reverse(int[] x,int a1, int a2) {
            
            
            for (int i = 0; i < (a2-a1+1)/2; i++) {
               swap(x,a1+i,a2-i);
            }
            
            return x;
            
        }
    private static void swap(int[] x, int i, int j) {
//      System.out.println("values swappeed are "+ x[i] +  "  "  + x[j]);
        int temp = x[i];
        x[i] = x[j];
        x[j] = temp; 
        
        
    }
}

and the output comes as

0 1 6 5 4 3 2 7 8 9 10  
Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading