0

I am struggling with a problem that requires me to reverse an array of characters in Java, using a recursive helper function. I was able to reverse an array of integers rather easily, but I keep getting an overflow error when I run this code trying to reverse an array of chars:

public static void reverseArray (char[] a) {
    reverseArrayHelper(a, 0, a.length-1);
}

public static void reverseArrayHelper(char[] a, int lower, int upper) {
    char temp = 'a';
    if(lower < upper) {
        temp = a[lower];
        a[lower]=a[upper];
        a[upper]=temp;
        reverseArrayHelper(a, lower++, upper--);
    }
}

If someone can help me understand where I am wrong with this code I would greatly appreciate it.

ziggz234
  • 41
  • 8

2 Answers2

2

Instead of lower++ and upper--, use lower + 1 and upper - 1. Alternatively, you can use ++lower and --upper. Postfix increment and decrement operators assign the value first and then change the value i.e. effectively, you are passing the same value of lower and upper to reverseArrayHelper each time.

Demo:

public class Main {
    public static void main(String[] args) {
        // Test
        char[] chars = { 'a', 'b', 'c', 'd', 'e' };
        reverseArray(chars);
        System.out.println(new String(chars));
    }

    public static void reverseArray(char[] a) {
        reverseArrayHelper(a, 0, a.length - 1);
    }

    public static void reverseArrayHelper(char[] a, int lower, int upper) {
        char temp;
        if (lower < upper) {
            temp = a[lower];
            a[lower] = a[upper];
            a[upper] = temp;
            reverseArrayHelper(a, lower + 1, upper - 1);
        }
    }
}

Output:

edcba
Arvind Kumar Avinash
  • 71,965
  • 6
  • 74
  • 110
-1
  public class HelloWorld{

 public static void main(String []args){        
    char[] charArray = {'a','e','d','c','b'};
     reverseArray(charArray);
 }       
  public static void reverseArray (char[] a) {
        reverseArrayHelper(a, 0, a.length-1);
 }
  public static void reverseArrayHelper(char[] a, int lower, int upper) { 
   if(lower < upper) {
   char temp = a[lower];
    a[lower]=a[upper];
    a[upper]=temp;
    reverseArrayHelper(a, ++lower, --upper);
}   
System.out.print(a);
}
}
Rajesh
  • 89
  • 5