我需要编写一个方法,用字符串生成器替换字符串启动器中的每个“F”(使用递归)。这是我的镜头,但它似乎没有正常工作:
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 :(得分:2)
请勿使用==
来比较字符串,请使用string1.equals(string2)
。
string1 == string2
测试两个引用是否引用内存中的同一对象,而不是它们的字符串内容值是否相等。
答案 1 :(得分:1)
你的问题是缺少信息,因为你有其他你没有解释的角色。
我正在使用您的代码来查看它是如何工作的,我意识到当我添加initiator.length() == 0
位时代码存在问题。
我要离开我的尝试,因为它可能会帮助你看到你做的不同,但这是不正确的。
在一个递归程序中,如果你用铅笔/纸来看看会发生什么,它会有所帮助,但是,基本上,你的第一个if
语句是有缺陷的,因为它正在寻找迭代器为{{1这不是你想要的,但是,如果它不是这三个字符中的一个,它将返回,尽早退出,这可能是你不想要的。
所以,用一个例子来看看它,记下你期望会发生什么,然后通过你的逻辑看看会发生什么,然后用结果和你对错误的分析来更新你的问题。
但是,在手动完成后,请使用调试器来查看是否可以确定如何修复程序。
"F"
答案 2 :(得分: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();
}