我试图找到字符串中的所有子字符串,我已经编写了以下代码,但我有一些不需要的输出,如下所示: 该方法首先打印子串(0,1),然后通过将b递增为b来调用自身并继续这样做,当b> string的长度时,它将预先增加a,并将+ 1传递给b,并且它继续这样,直到最后一个子串,其中+ 1 ==字符串的长度,这是我的recurive程序终止时。
public static void main(String[] args) {
recsub("java",0,1);
}
public static void recsub(String str,int a,int b){
if(b>str.length()) {
System.out.println();
recsub(str,++a,a+1);
}
else {
System.out.print(str.substring(a,b)+" ");
}
if((a+1)==str.length()) {
}
else {
recsub(str,a,b+1);
}
此代码的输出为:
j ja jav java
a av ava
v va
a
a
v va
a
a
或者我可以通过这种方法突破并返回主程序,只要程序输入if(if(a + 1)== ...),就像打破一个循环一样?
答案 0 :(得分:0)
如果你很好地构建你的逻辑,你就不应该打破这样的例程,虽然它对返回<非常合法(并且通常很有用) / strong>根据需要。
错误发生在第二次递归中:这应该以子字符串大小 b 足够短为条件。
我冒昧地更换了一个字母的变量名(a - &gt; start_pos,b - &gt; size),更改了测试字符串(&#34; java&#34;有两个一个,因此更难跟踪),并清理空白区域。
public class substr {
public static void main(String[] args) {
recsub("abcd", 0, 1);
}
public static void recsub(String str, int start_pos, int size){
if (size > str.length()) {
// Print newline; restart with next character
System.out.println();
recsub(str, ++start_pos, start_pos+1);
}
else {
// Print one substring
System.out.print(str.substring(start_pos, size)+" ");
if (start_pos+1 < str.length()) {
recsub(str, start_pos, size+1);
}
}
}
}
输出:
a ab abc abcd
b bc bcd
c cd
d