我每次都会以false
的形式获得输出。
我的目标是打印true
,如果String t
中的String s
存在于同一订单中。
例如:
String s = "gagbgcgd";
String t = "abcd";
预期产出:
真
String s = "gagcgdgb";
String t = "abcd";
预期产出:
假
这是代码。
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));
}
}
答案 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);