我是一名學生,我一直在努力研究以下挑戰:在沒有使用substring
方法的情況下在較大的字符串(乾草堆)中找到子字符串(指針),並且使用遞歸。遞歸是不是我的強項,但我已經做了以下工作:遞歸與Java以意想不到的方式行爲
public class Contains
{
public static void main(String[] args)
{
System.out.println(contains("Java programming", "ogr", false));
}
public static boolean contains(String haystack, String needle, boolean doesContain)
{
if(haystack.length() < needle.length())
{
return false;
}
else
{
for(int i = 0; i < needle.length(); i++)
{
if(haystack.charAt(i) != needle.charAt(i))
if((i + 1) == needle.length())
{
doesContain = false;
break;
}
else
break;
else
if((i + 1) == needle.length())
{
doesContain = true;
break;
}
else
continue;
}
char[] haystackChar = haystack.toCharArray();
char[] newCharArray = new char[(haystackChar.length - 1)];
for(int j = 1; j < haystackChar.length; j++)
{
newCharArray[j - 1] = haystackChar[j];
}
String newStr = new String(newCharArray);
if(doesContain == false)
contains(newStr, needle, doesContain);
}
return doesContain;
}
}
我知道這可能不是最好的或最優雅的解決方案,但我大多隻是試圖得到它的工作。我一直在Eclipse調試器中運行它,並且一切都按預期運行,直到在方法調用contain
期間調用if(doesContain == false)
,其中doesContain
在for循環迭代過程中設置爲true。調試器顯示doesContain
的值(正確)爲true,並且它顯示跳過if語句並退出else塊。然而,在此之後,它立即跳回到else塊,並且只調用遞歸調用contain
,而不是返回doesContain
。然後,它繼續遞歸工作,隨後失敗並返回false,因爲它現在正在搜索字符串的其餘部分,「針」不在其中。
我知道StackOverflow本身不是'家庭作業幫助'的位置,但是我爲學校之外的其他目的而編程,我很困惑它爲什麼會這樣做。有誰知道它爲什麼這樣做?我在這裏錯過了什麼嗎?
哦,男人,我希望我是一個女孩得到垃圾郵件的答案!無論如何,你的(格式錯誤)代碼工作得很好。問題是你放棄了遞歸調用的結果。更改'contains(newStr,needle,doesContain);'返回'包含(newStr,needle,doesContain);'和vòila! –