mjr*_*mjr 4 java recursion if-statement
下面的方法接受一个字符串和一个模式,如果它们相互匹配则返回true.一个 '.' 匹配1个字符,'*'匹配0或更多(例如,expMatch("abc", "a.c")应该返回true).我添加了一堆打印语句来查看我出错的地方,似乎if语句被跳过了,即使是str.length() == 1.
我叫它 System.out.println(expMatch("abc", "a*c"));
这是代码:
public static boolean expMatch(String str, String pat)
{
if (str.charAt(0) == pat.charAt(0) || pat.charAt(0) == '.')
{
System.out.println("in if");
System.out.println(str.charAt(0));
System.out.println(pat.charAt(0));
System.out.println(str.length());
if (str.length() == 1)
return true;
expMatch(str.substring(1), pat.substring(1));
}
else if (pat.charAt(0) == '*')
{
System.out.println("in else");
System.out.println(str.charAt(0));
System.out.println(pat.charAt(0));
if (str.length() == 1)
return true;
if (str.charAt(0) == pat.charAt(1)) //val of * = 0
expMatch(str, pat.substring(1));
else if (str.charAt(1) ==pat.charAt(1))
expMatch(str.substring(1), pat.substring(1));
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
输出是:
in if
a
a
3
in else
b
*
in if
c
c
1
false
Run Code Online (Sandbox Code Playgroud)
即使长度为1,它也会跳过if?知道为什么吗?PS我不是在寻找解决方案,只是为什么要跳过if语句.
小智 6
你总是从最后的方法返回false.您以递归方式调用expmatch但从不使用返回值.代码进入第一个if,recurses(因为length不是1)并且在返回时将转到返回false的最终return语句.