java - 使用递归错误。线程中的异常 "main"java.lang.StringIndexOutOfBoundsException : String index out of range: 0

标签 java string recursion exception runtime-error

我试图编写的程序将使用递归来计算给定字符串中“A”的数量。它应该做的是计算程序本身递归了多少次。该程序编译正确,但运行时出现此错误

class hw10

{

public static void main(String[] args)
{
    System.out.println(f(""))
    System.out.println(f("A"));
    System.out.println(f("B"));
    System.out.println(f("BCA"));
    System.out.println(f("ABC"));
    System.out.println(f("ABACAD"));

}

public static int f(String s)
{

    if(s.length() <= 0)
    {
        if(s.charAt(0) == 'A')
        {
            return 1;
        }
        else
        {
            return 0;
        }


    }
    else
    {
        if(s.charAt(0) == 'A')
        {
            return 1 + f(s.substring(1));
        }
        else
        {
            return f(s.substring(1));
        }
    }

}

}

这是完整的消息 线程“main”中的异常 java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:0 在 java.base/java.lang.StringLatin1.charAt(StringLatin1.java:47) 在 java.base/java.lang.String.charAt(String.java:702) 在 hw10.f(hw10.java:20) 在 hw10.f(hw10.java:35) 在 hw10.main(hw10.java:7)

最佳答案

递归导致代码短 试试这个:

        public static int f(String s) {
          if(s.length() == 0) return 0;
          if(s.charAt(0) == 'A') return (1 + f(s.substring(1)));
          return f(s.substring(1));
    }

关于java - 使用递归错误。线程中的异常 "main"java.lang.StringIndexOutOfBoundsException : String index out of range: 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59199481/

相关文章:

c# - 将 KeyDown 事件 (Keys) 连接到一个 C# (wpf) 字符串

c - 线性打印汉诺塔

javascript - 尾递归和斐波那契

Java Annotation : On property or on method? 有什么区别

java - 根据单个用户输入填充和排序并行数组

c# - 将字符串数组转换为字节数组

javascript - 如何通过用户定义的路径创建文本文件

javascript - 如何在 JavaScript 中创建此对象的键/值的所有组合?

java - 使用 WireMock 测试 Spring JUnit 中的多个应用程序上下文

java - 如何 Autowiring Spring类的bean