【问题标题】:java recursively reversing an array of characters [duplicate]java递归地反转字符数组[重复]
【发布时间】:2020-04-30 17:48:54
【问题描述】:

我正在努力解决一个问题,该问题需要我使用递归辅助函数来反转 Java 中的字符数组。我能够很容易地反转一个整数数组,但是当我运行这段代码试图反转一个字符数组时,我不断收到溢出错误:

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--);
    }
}

如果有人可以帮助我了解我在此代码中的错误之处,我将不胜感激。

【问题讨论】:

  • 你需要把++/--放在变量前面。

标签: java arrays recursion


【解决方案1】:

使用lower + 1upper - 1 代替lower++upper--。或者,您可以使用++lower--upper。后缀递增和递减运算符首先分配值,然后更改值,即有效地,您每次都将 lowerupper 的相同值传递给 reverseArrayHelper

演示:

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);
        }
    }
}

输出:

edcba

【讨论】:

    【解决方案2】:
      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);
    }
    }
    

    【讨论】:

      猜你喜欢
      • 2017-02-26
      • 2014-06-10
      • 2012-10-20
      • 2018-04-05
      • 1970-01-01
      • 1970-01-01
      • 2017-06-22
      • 1970-01-01
      相关资源
      最近更新 更多