Java-递归类中返回字符串的问题
我试图创建一个递归类,该类将Java-递归类中返回字符串的问题,java,string,recursion,Java,String,Recursion,我试图创建一个递归类,该类将字符串作为参数,并从以参数字符串开头的stringlist返回一行。如果找不到匹配项,则应返回“”。我似乎就快到了,但由于某种原因,一旦找到字符串并输入if语句,它就会返回字符串,然后跳转到代码中的另一个语句。换言之,由于某种原因,它不会退回它。任何帮助都会很有帮助 public String getLineStartingWith(String _string){ System.out.println("GETLINESTRING: " + _string
字符串作为参数,并从以参数字符串开头的stringlist返回一行。如果找不到匹配项,则应返回“”。我似乎就快到了,但由于某种原因,一旦找到字符串并输入if语句,它就会返回字符串,然后跳转到代码中的另一个语句。换言之,由于某种原因,它不会退回它。任何帮助都会很有帮助
public String getLineStartingWith(String _string){
System.out.println("GETLINESTRING: " + _string);
//place parameter string into local string
String string = _string;
//return the line from the stringlist if it starts with the
//parameter string
if(currentString.startsWith(_string)){
System.out.println("CURRENT STRING: " + currentString);
return currentString;
}
restOfList.getLineStartingWith(_string);
return "";
//return restOfList.getLineStartingWith(_string);
}
编辑
我对代码做了一些更改。但由于某种原因,在返回当前字符串后,每次都返回restOfList.getLineStartingWith(string)。我认为它不能检测它是否是空的
public String getLineStartingWith(String string){
System.out.println("GETLINESTRING: " + string);
//return the line from the stringlist if it starts with the
//parameter string
if(currentString.startsWith(string)){
System.out.println("CURRENT STRING: " + currentString);
return currentString;
}
if(restOfList.isEmpty){
return "";
}
return restOfList.getLineStartingWith(string);
}
你为什么这么做
//place parameter string into local string
String string = _string;
此代码具有完全相同的效果:
public String getLineStartingWith(String string){
System.out.println("GETLINESTRING: " + string);
// etc.
字符串是不可变的,所以不能对输入做任何不好的事情。此外,您甚至没有使用string
(以后的所有代码都使用\u string
)
我想你的问题是这件东西没有被退回:
restOfList.getLineStartingWith(_string);
尝试:
您可能还需要另一个处理restOfList为空的基本情况。为什么要这样做
//place parameter string into local string
String string = _string;
此代码具有完全相同的效果:
public String getLineStartingWith(String string){
System.out.println("GETLINESTRING: " + string);
// etc.
字符串是不可变的,所以不能对输入做任何不好的事情。此外,您甚至没有使用string
(以后的所有代码都使用\u string
)
我想你的问题是这件东西没有被退回:
restOfList.getLineStartingWith(_string);
尝试:
您可能还需要另一个处理restOfList
为空的基本案例。如果这可能无法回答您的问题,我很抱歉
在我看来,您只是想显示以该特定字符串开头的所有行。对字符串列表中的每个项目进行一个简单的循环怎么样?像这样的怎么样:
for (String line : allLines) {
if (line.startsWith(string)){
System.out.println(line);
}
}
如果这不是您想要的,我很抱歉。如果这可能无法回答您的问题,我很抱歉
在我看来,您只是想显示以该特定字符串开头的所有行。对字符串列表中的每个项目进行一个简单的循环怎么样?像这样的怎么样:
for (String line : allLines) {
if (line.startsWith(string)){
System.out.println(line);
}
}
如果这不是您想要的,很抱歉。所以我只是无缘无故地将第一部分留在那里。我的错。当你指的是基本情况,那意味着什么?@SergioRa-在递归中,基本情况就是你知道答案的情况。例如,在您的程序中,if(currentString.startsWith(_string)){
部分是一个基本情况,因为您在那一点上停止递归调用函数。当您有答案时,您有一个基本情况,当没有答案时,您只需要一个基本情况。好吧,我想我开始理解了。类似这样的事情:if(restOfList.isEmpty){return”“;}where is empty是一个布尔值。@SergioRa-完全正确。请确保将其放在递归调用之前(restOfList.getLineStartingWith(_string);
)为了防止无限循环。我修改了我的代码并在上面添加了它。但是我仍然有一些问题。好像它不想返回字符串,我最终得到了一个空指针异常。我的错。当你指的是基本情况时,这意味着什么?@SergioRa-在递归中,基本情况是我这是一种您知道答案的情况。例如,在您的程序中,if(currentString.startsWith(_string)){
节是一个基本情况,因为您在该点停止递归调用函数。当您有答案时,您有一个基本情况,当没有答案时,您只需要一个基本情况。好的,我想我开始理解了。类似这样的内容:if(restOfList.isEmpty){return”“;}where is empty是一个布尔值。@SergioRa-完全正确。请确保将其放在递归调用之前(restOfList.getLineStartingWith(_string);
)为了防止无限循环。我修改了我的代码并在上面添加了它。但是我仍然有一些问题。它好像不想返回字符串,我最终得到了一个空指针异常