2016-07-12 39 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