java递归地反转字符数组
我正在努力解决一个问题,这个问题要求我使用递归帮助函数在Java中反转字符数组。我能够相当容易地反转整数数组,但当我运行此代码试图反转字符数组时,我不断遇到溢出错误:java递归地反转字符数组,java,arrays,recursion,Java,Arrays,Recursion,我正在努力解决一个问题,这个问题要求我使用递归帮助函数在Java中反转字符数组。我能够相当容易地反转整数数组,但当我运行此代码试图反转字符数组时,我不断遇到溢出错误: public static void reverseArray (char[] a) { reverseArrayHelper(a, 0, a.length-1); } public static void reverseArrayHelper(char[] a, int lower, int upper) {
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--);
}
}
publicstaticvoidreversearlay(char[]a){
反向arrayHelper(a,0,a.length-1);
}
公共静态void reversearlayhelper(字符[]a,整数下限,整数上限){
字符温度='a';
if(下部<上部){
温度=a[较低];
a[下]=a[上];
a[上限]=温度;
reverseArrayHelper(a,下++,上--);
}
}
如果有人能帮助我理解我在这段代码中的错误,我将不胜感激 使用
lower+1
和upper-1
代替lower++
和upper-1
。或者,您可以使用++lower
和--upper
。后缀增量和减量运算符首先分配值,然后更改值,即有效地,您每次都将相同的lower
和upper
值传递给reversearlayhelper
演示:
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
公共类HelloWorld{
公共静态void main(字符串[]args){
char[]charArray={'a','e','d','c','b'};
反向耳环(charArray);
}
公共静态void reversearlay(字符[]a){
反向arrayHelper(a,0,a.length-1);
}
公共静态void reversearlayhelper(char[]a,int-lower,int-upper){
if(下部<上部){
字符温度=a[较低];
a[下]=a[上];
a[上限]=温度;
反转辅助线(a,++下,--上);
}
系统输出打印(a);
}
}
您需要将++
/--
放在变量前面。
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);
}
}