Java 我的代码打印错误。有什么不对劲?

Java 我的代码打印错误。有什么不对劲?,java,Java,每次我的输出都是false 我的目标是打印true,如果字符串t在字符串s中的顺序相同 例如: 预期产出: 真的 预期产出: 假的 这是代码 public class StringCompare { public static boolean stringCompare(String t,String s) { if (t.length() == 0) { return true; } if (s.length()

每次我的输出都是false

我的目标是打印true,如果字符串t在字符串s中的顺序相同

例如:

预期产出:

真的

预期产出:

假的

这是代码

public class StringCompare {
    public static boolean stringCompare(String t,String s) {
        if (t.length() == 0) {
            return true;
        }
        if (s.length() == 0) {
            return false;
        }
        if (t.charAt(0) == s.charAt(0)) {
            stringCompare(t.substring(1), s.substring(1));
        }
        else {
            stringCompare(t, s.substring(1));
        }
        return false;
    }

    public static void main(String[] args) {
        String s = "acaoadaianaga";
        String t = "coding";
        System.out.println(stringCompare(t,s));
    }
}

当您递归时,不会返回递归的结果。改变

if(t.charAt(0)==s.charAt(0)){
    stringCompare(t.substring(1), s.substring(1));
}
else{
    stringCompare(t, s.substring(1));
}
差不多

if(t.charAt(0)==s.charAt(0)){
    return stringCompare(t.substring(1), s.substring(1));
}
else{
    return stringCompare(t, s.substring(1));
}

当您递归时,不会返回递归的结果。改变

if(t.charAt(0)==s.charAt(0)){
    stringCompare(t.substring(1), s.substring(1));
}
else{
    stringCompare(t, s.substring(1));
}
差不多

if(t.charAt(0)==s.charAt(0)){
    return stringCompare(t.substring(1), s.substring(1));
}
else{
    return stringCompare(t, s.substring(1));
}

这是因为外部递归调用总是返回false 除了 ift.length==0{返回true;}


看看Elliott Frisch的答案。

这是因为外部递归调用总是返回false 除了 ift.length==0{返回true;}

请看Elliott Frisch的答案。

您应该使用.contains。例如:

 boolean istrue = t.contains(s);
您应该使用.contains。例如:

 boolean istrue = t.contains(s);

代码的主要问题是,无论递归中剩余执行的返回值是多少,递归的第一次执行总是返回false

您应该将代码更改为以下内容:

if(t.charAt(0)==s.charAt(0)){
    return stringCompare(t.substring(1), s.substring(1));
}
else{
    return stringCompare(t,s.substring(1));
}

并删除最后一次返回的false;语句。

代码的主要问题在于递归的第一次执行总是返回false,无论递归中剩余执行的返回值是多少

您应该将代码更改为以下内容:

if(t.charAt(0)==s.charAt(0)){
    return stringCompare(t.substring(1), s.substring(1));
}
else{
    return stringCompare(t,s.substring(1));
}

并删除最后一次返回的false;声明。

非常感谢。我的其他一些作业也有同样的问题。但是它们现在已经解决了。@iVvaibhav如果你的问题已经解决了,别忘了。@iVvaibhav作为一个注释,因为它看起来像是你在接受的答案之间切换:你只能接受一个答案。你必须决定哪一个。非常感谢。我的其他一些作业也有同样的问题。但是它们现在已经解决了。@iVvaibhav如果你的问题已经解决了,别忘了。@iVvaibhav作为一个注释,因为它看起来像是你在接受的答案之间切换:你只能接受一个答案。你必须决定哪一个。我的意思是:OP不需要检查的是t在s中,就像t现在一样。OP检查t中的字符是否在s中。contains无法使用t.contains检查。所以你可以考虑删除你不正确的答案,或者你可以改进它:。我的意思是:OP不需要检查的是t在s中的状态和t当前的状态一样。OP检查t中的字符是否在s中。contains无法使用t.contains检查。因此,您可以考虑删除不正确的答案,也可以对其进行改进:。