我当前的代码返回输出:
true
Expected: true
false
Expected: true
false
Expected: true
false
Expected: false
false
Expected: false
所以我的逻辑存在问题,我没有看到
public static void main(String[] args)
{
System.out.println(find("",""));
System.out.println("Expected: true\n");
System.out.println(find("Mitten","Mit"));
System.out.println("Expected: true\n");
System.out.println(find("I love my CS courses!"," CS"));
System.out.println("Expected: true\n");
System.out.println(find("","Cookies."));
System.out.println("Expected: false\n");
System.out.println(find("Java","Python"));
System.out.println("Expected: false\n");
}
public static boolean find(String text, String str)
{
boolean found = false;
if(text.length() == 0 && str.length() == 0)
{
found = true;
return found;
}
if(text.length() == 0 || str.length() == 0)
{
return found;
}
if(str.length() > text.length())
{
return found;
}
if(str.equals(text.substring(0,str.length()-1)))
{
found = true;
}
else
{
text = text.substring(1);
find(text, str);
}
return found;
}
请帮助
答案 0 :(得分:7)
我发现此声明存在问题
if(str.equals(text.substring(0,str.length()-1)))
由于substring
的第二个索引是独占的,所以它应该是
if(str.equals(text.substring(0,str.length())))
将str
与str.length
的第一个text
字符进行比较。
当然,您可以使用text.contains(str)
或text.startsWith(str)
并删除部分代码,但这可能不是练习要求的一部分。
除了这个问题,当你进行递归调用时,你通常应该对该调用返回的值做一些事情:
found = find(text, str);
否则,为什么要首先进行递归调用? (除非它具有将作为参数传递的对象变为递归调用的副作用,在您的情况下不会这样做)