Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单递归代码错误返回_Java_Recursion - Fatal编程技术网

Java 简单递归代码错误返回

Java 简单递归代码错误返回,java,recursion,Java,Recursion,为什么我的代码应该返回true,返回false 如果str2包含零个或多个字符,然后是str1的所有字符,然后是零个或多个字符,则方法isSubstring应返回true。如果a未出现在b中的任何位置,则该方法应返回false 我不是在寻找返回正确输出的替代方法,而是想找出我的代码出错的原因 public class stringRecursionPractice{ public static void main(String[] args){ String str1 =

为什么我的代码应该返回true,返回false

如果str2包含零个或多个字符,然后是str1的所有字符,然后是零个或多个字符,则方法isSubstring应返回true。如果a未出现在b中的任何位置,则该方法应返回false

我不是在寻找返回正确输出的替代方法,而是想找出我的代码出错的原因

public class stringRecursionPractice{
    public static void main(String[] args){
        String str1 = "abc"; 
        String str2 = "abc";
        System.out.println(isSubstring(str1, str2));
    }

    /*
     * Returns the string containing only the first character of the
     * specified string.
     */
    public static String head(String s) {
        return s.substring(0, 1);
    }

    /*
     * Returns the string containing the all the characters but the first
     * character in the specified string.
     */
    public static String tail(String s) {
        return s.substring(1);
    }

    public static boolean isSubstring(String str1, String str2){
    if(str1.length() == 1 && str1.charAt(0) == str2.charAt(0)){
        return true; 
    }

    if(head(str1).equals(head(str2))){
        isSubstring(tail(str1), tail(str2)); 
    }

    return false; 
    }
}

递归调用应返回以下结果:

if(head(str1).equals(head(str2))){
    return isSubstring(tail(str1), tail(str2)); 
}

你应该做一些调试。你已经做了什么来调试你的代码?我试过几次调试它,但它总是返回false。第二个
if块,还应该包含一些
return`语句,因为如果没有,控件总是转到最后一个
return false
。但是最后一个递归调用isSubstring(“c”,“c”)不会返回true吗?但是最后一个递归调用isSubstring(“c”,“c”)不会返回true吗?@CMSC是的,它可能返回
true
,但是您忽略了这一点,因此您的程序到达
isSubstring
的最后一个语句,它是
返回false。(第一个
isSubstring
调用就到达了该语句)@Tom为什么它忽略了?第一个isSubstring调用将在第二个if语句if(head(str1).equals(head(str2))中被捕获。从那里它将执行递归,直到str1=“c”和str2=“c”。然后它会被第一个if语句捕获并返回“true”,不是吗?@CMSC然后呢?第一次调用完成了他的工作,第二次调用了
isSubstring
。。。然后?因为您没有告诉他返回递归调用的结果,所以它一直在执行该方法,所以它执行语句
returnfalse
@Tom哦,我明白了。非常感谢。