Java 我的代码打印错误。有什么不对劲?
每次我的输出都是false 我的目标是打印true,如果字符串t在字符串s中的顺序相同 例如: 预期产出: 真的 预期产出: 假的 这是代码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()
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检查。因此,您可以考虑删除不正确的答案,也可以对其进行改进:。