下面的方法接受一個字符串和一個模式,如果它們相互匹配則返回true。一個 '。'匹配1個字符和'*'匹配0或更多(例如expMatch("abc", "a.c")
應返回真實)。我添加了一堆打印語句來查看我出錯的地方,即使str.length() == 1
似乎也會跳過if語句。Java if語句被跳過
我稱之爲與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;
}
並且輸出是:
in if
a
a
3
in else
b
*
in if
c
c
1
false
即使長度爲1它跳過如果?任何想法爲什麼? P.S.我不在尋找解決方案,只是爲什麼if語句被跳過。
我建議你添加更多的日誌記錄 - 我相信你只是混淆了你自己,因爲輸出很難理解與遞歸有關。 – 2015-02-09 21:51:31
您不會返回遞歸調用的值,因此這些值只是被丟棄。相反,在遞歸調用返回後,您總是返回false。 – 2015-02-09 21:53:32
'if'語句被'跳過',因爲你有一個錯誤,你還沒有完全理解你在做什麼。這對一個新手來說很正常。通過使用IDE的設施並使用'println'語句學習如何進行調試。如果你在工作,你會得到它。 – 2015-02-09 21:54:06