【问题标题】:Recursion method in JavaJava中的递归方法
【发布时间】:2013-02-10 23:43:03
【问题描述】:

我正在尝试使用递归方法将字符串更改为 char 数组,但出现错误

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(Unknown Source)

我只想使用递归方法(不是循环或 toChar 方法)来解决这个问题

public class Recur {
    public char[]  stringTochar(String str)
    {
        if (str != null && str.length() > 0)
        {
            System.out.println(str.charAt(0)) ;
            stringTochar(str.substring(1)); 
        }
        return stringTochar(str.substring(1)) ;
    }
}

public class Tester {
    public static void main(String[] args) {
        Recur recur= new Recur ();
        recur.stringTochar("this is a test");
    }
}

【问题讨论】:

  • 你为什么要重新发明String#toCharArray,尤其是为什么要使用recursion重新发明它?
  • @T.J.Crowder 学习目的。
  • 您的基本情况也调用递归函数而不是停止。
  • @buni:这个问题特别不适合用递归来解决。如果您想了解递归,我建议您执行不同的任务,例如(比如说)遍历树结构。问题在于递归任务必须逐步建立其结果,这对于 char[] 返回类型很难做到。

标签: java


【解决方案1】:
str.substring(1);

str 长度为 0 时会发生什么?

【讨论】:

    【解决方案2】:
    public class Recur
    {
        private static char [] stringToChar (
            String str, char [] destination, int offset)
        {
            if (destination == null)
            {
                destination = new char [str.length ()];
                offset = 0;
            }
    
            if (offset < str.length ())
            {
                destination [offset] = str.charAt (offset);
                stringToChar (str, destination, offset + 1);
            }
            return destination;
        }
    
        public static void main (String [] args)
        {
            char [] chars = stringToChar ("this is a test", null, 0);
    
            for (char c: chars)
                System.out.println (c);
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-03-04
      • 1970-01-01
      • 2016-03-10
      • 1970-01-01
      • 1970-01-01
      • 2014-05-03
      • 1970-01-01
      相关资源
      最近更新 更多