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

时间:2016-03-25 15:28:32

标签: java

我每次都会以false的形式获得输出。

我的目标是打印true,如果String t中的String s存在于同一订单中。

例如:

  1. String s = "gagbgcgd";
    String t = "abcd";
    

    预期产出:

      

  2. String s = "gagcgdgb";
    String t = "abcd";
    

    预期产出:

      

  3. 这是代码。

    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));
        }
    }
    

4 个答案:

答案 0 :(得分:11)

当你递归时,你不会返回递归的结果。变化

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));
}

答案 1 :(得分:2)

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

您应该将代码更改为:

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

并删除最后一个return false;语句。

答案 2 :(得分:0)

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

看看Elliott Frisch的回答。

答案 3 :(得分:-2)

您应该使用.contains。例如:

 boolean istrue = t.contains(s);