2011-03-31 128 views
0

我需要編寫一個方法,用字符串生成器(使用遞歸)替換字符串啓動器中的每個「F」。這是我的拍攝,但它似乎並沒有正常工作:使用遞歸替換另一個字符串的部分(Java)

public String nextGeneration(String initiator, String generator) 
{ 
    String result2 = ""; 
    if (initiator=="F") 
    { 
     result2 = generator; 
    } 
    else 
    { 
     if (initiator.substring(0,0)=="F") 
     { 
      result2 = generator + nextGeneration(initiator.substring(1,initiator.length()), generator); 
     } 
     else if (initiator.substring(0,0)=="+") 
     { 
      result2 = "+" + nextGeneration(initiator.substring(1,initiator.length()), generator); 
     } 
     else if (initiator.substring(0,0)=="-") 
     { 
      result2 = "-" + nextGeneration(initiator.substring(1,initiator.length()), generator); 
     } 
    } 
    return result2; 
} 

有什麼建議嗎?

+0

「有什麼建議?」 1)描述你期望看到什麼,以及你看到了什麼,而不是提供模糊和不太有用的「似乎沒有正常工作」。2)爲了更快地獲得更好的幫助,請發佈[SSCCE](http:///pscode.org/sscce.html)。 – 2011-03-31 00:52:58

回答

2

不要使用==來比較字符串,請使用string1.equals(string2)

string1 == string2測試兩個引用是否指向內存中的同一對象,而不是它們的字符串內容值是否相等。

1

您的問題缺少信息,因爲您有其他字符,您對此沒有作出解釋。

我在玩你的代碼,看看它是如何工作的,當我加入initiator.length() == 0位時,我發現你的代碼存在問題。

我在這裏離開我的嘗試,因爲它可以幫助你看到你做了什麼不同,但它是不正確的。

在遞歸程序,如果你走過它用鉛筆/紙,看看會發生什麼有幫助,但是,基本上,你的第一if說法是有缺陷的,因爲它是尋找迭代器是一個"F"這不是什麼你想要,但是,如果它不是這三個角色中的一個,它會返回,提前退出,這可能是你不想要的。因此,通過一個例子,寫下你期望會發生的事情,然後通過你的邏輯,看看會發生什麼,然後用結果和分析出錯的分析來更新你的問題。

但是,手動完成後,使用調試器來查看是否可以確定如何修復程序。

public String nextGeneration(String initiator, String generator) 
{ 
    String result2 = ""; 
    if (initiator.length() == 0) { 
     return initiator; // This is where I realized you have a problem, I couldn't see what should be returned here. 
    } 
    char f = initiator.charAt(0); 
    switch(f) { 
     case 'F': 
      result2 = generator + nextGeneration(initiator.substring(1,initiator.length()), generator); 
     break; 
     case '+': 
      result2 = "+" + nextGeneration(initiator.substring(1,initiator.length()), generator); 
      break; 
      case '-': 
      result2 = "-" + nextGeneration(initiator.substring(1,initiator.length()), generator); 
      break; 
      default: 
      break; 
     } 
    return result2; 
} 
0
public static String nextGeneration(String initiator, String generator){ 
    StringBuffer result = new StringBuffer(); 
    if(initiator.length() > 0){ 
     char letter = initiator.charAt(0); 
     if(letter == 'F') 
      result.append(generator); 
     else 
      result.append(letter); 
     result.append(nextGeneration(initiator.substring(1),generator)); 
    } 
    return result.toString(); 
} 
相關問題