2016-07-12 37 views
2

这一直让我头痛,我无法弄清楚。目标是让字符串重复使用时间参数作为字符串能够重复其自身的次数。 例如:使用递归连接字符串

stringTimes("Hello", 3); //should return HelloHelloHello, 
stringTimes("cat", 2); //should return catcat, 
stringTimes("monkey", 0); //should return _____, 
下面

是我一直使用的代码,我得到什么。 帮助!

public static String stringTimes(String theString, int times) 
{ 
    String adder = ""; 
    if (times >= 1) { 
     adder += theString; 
     return stringTimes(theString, times - 1); 
    } 
    return adder; 
} 

public static void main(String[] args) { 
    System.out.println(stringTimes("hello ", 8)); 
} 
+2

您需要将“加法器”传递给stringTimes的内部调用(而不是原始字符串,theString) – FishStix

+0

如果这是一个类分配,它是一个非常糟糕的。递归是这项工作的错误工具。如果你在教汽车修理课,你会要求学生用一把小钳子拧紧螺母,“就像练习一样”? –

+0

是的,但后来又有一项任务要求我使用for循环 –

回答

2

您的方法正在进行最后一次递归调用,然后返回一个空字符串。将其更改为:

public static String stringTimes(String theString, int times) 
{ 
    if (times >= 1) { 
     return theString + stringTimes(theString, times - 1); 
    } 
    return ""; 
} 
+1

'adder'几乎不是必需的,也许写一个else条件返回一个空字符串?这可能会更好地说明递归。 –

+1

@TimStraubinger是的你是对的,那是更清洁。编辑。 – nhouser9

+0

BOOYAH !!!这工作,但我想知道是否有一个更清晰的方式来写这个。 –

0

这里简单和压缩之一:

public static String stringTimes(String theString, int times) { 
    return times > 0 ? theString + stringTimes(theString, times - 1) : ""; 
} 

优点:

  • 只有一个简单的三元运算符线。
  • 在我看来,在这个特殊情况下,一个返回语句更容易阅读。
+0

这是正确的,但我不知道为什么你会这样写 - 它只是让阅读变得更难。 – nhouser9