gpt4 book ai didi

java - 递归子字符串越界错误

转载 作者:行者123 更新时间:2023-12-01 12:19:56 27 4
gpt4 key购买 nike

我必须创建一个递归方法来显示给定字符串在字母“A”或“a”之前的所有子字符串,并在此过程中忽略该字母。终止条件工作正常。然而,在继续条件下,我抛出了一个indexoutofbounds错误,我不完全确定为什么。据我所知,我在索引达到字符串长度之前停止循环。但我会把它贴在这里以防万一我错过了什么。

class Tree
{
void subStrings(String s)
{
if(s.length() == 1)
{
if(s.charAt(0) == 'A' || s.charAt(0) == 'a')
{
System.out.println("Cannot shorten substring.");
}
else
{
System.out.println(s);
}

}

else
{
String subString = "";
int i = 0;
while(s.charAt(i) != 'A' && i < s.length())//bad line
{
subString += s.charAt(i);
i++;
}

if(subString.equals(""))
subStrings(s.substring(i));
else
{
System.out.println(subString);
subStrings(s.substring(i));
}
}
}

int treeHeight(String tree)
{
return 0;
}
}

最佳答案

由于其他一些问题,即使 Robby 的重构也无法帮助您实现目标。对于与您的异常有关的内容,您必须迭代到 i < s.length() - 1因为您在循环中递增索引,并且您在循环内使用的 charAt 方法从索引 0 开始。

进一步检查,您应该更改您的 substring(i)subStrings(s.substring(0, i))否则你会在递归中得到相同的字符串。以下内容应该适合您

    void subStrings(String s)
{
if(s == null || s.length() == 0 || s.charAt(0) == 'A' || s.charAt(0) == 'a')
{
System.out.println("Cannot shorten substring.");
return;
}
if(s.length() != 1)
{
String subString = "";
int i = 0;
while(s.charAt(i) != 'A' && s.charAt(i) != 'a' && i < s.length() - 1)//bad line
{
subString += s.charAt(i);
i++;
}


if(subString.equals(""))
subStrings(s.substring(i));
else
{
System.out.println(subString);
subStrings(s.substring(0, i));
}
}
}

关于java - 递归子字符串越界错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26749709/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com