2011-03-31 132 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(); 
} 
相关问题