2012-08-22 19 views
-2

我想將第一個方法更改爲while和for循環。我已經添加了下面的代碼。它是否正確?Java - 將方法更改爲for/while循環

public String extractWordFour(String text){ 
     if(text.length()==0 || text.charAt(0) == ''){ 
      return ""; 
     } else { 
      return text.charAt(0) + extractWordFour(text.substring(1)); 
     } 
    } 

public String extractWordFour(String text){ 
    int i=0; 
    while (i<=text.length){ 
     return text.charAt(0) + extractWordFour(text.substring(i)); 
     i++; 
    } 
} 

public String extractWordFour(String text){ 
    for(int i=0;i<=text.length();i++){ 
     return text.charAt(0) + text.substring(1); 
    } 
} 
+0

第一個代碼不能編譯。 – assylias

+0

還是我需要添加'||在while循環測試中的text.charAt(0)=='''? – nsc010

+0

至於我,它看起來很奇怪。該方法的目的是什麼? – jdevelop

回答

2

我不打算回答這個問題,因爲我認爲它是一個h.w.但我把它放在一個答案,因爲我不能在評論中適合這一點,但我假設你想要將遞歸解決方案轉換爲while或for循環解決方案。

你的解決方案首先是錯誤的,因爲你在混合遞歸和混合。你不應該在你的while循環中調用函數!

public String extractWordFour(String text){ 
    int i=0; 
    while (i<=text.length){ 
     return text.charAt(0) + extractWordFour(text.substring(i)); 
     i++; 
    } 
} 

這一個不能完成,因爲你是在它甚至超過一次循環之前返回它。

public String extractWordFour(String text){ 
    for(int i=0;i<=text.length();i++){ 
     return text.charAt(0) + text.substring(1); 
    } 
} 

反正希望有幫助。要做的最好的事情是完全理解第一個函數的作用,寫下來,然後考慮如何使它在一段時間或for循環中完成同樣的事情。

+0

是的,這是有道理的,我會給它另一個去 – nsc010

1

首先,您不能有String.charAt(0) == '',因爲''不是有效的字符,不像""爲空的字符串是有效的。

你的第二個方法是行不通的,因爲它應該是text.length()而不是text.length是,當你調用它的陣列上,還有i++因爲遞歸的不可達的方法。如果失敗了,方法簽名聲明它返回一個String,但是沒有返回語句。

你的第三個方法確實有返回語句,但它仍然不起作用,因爲它只會在第一次迭代時返回,因此只給出前2個字符(事實上,你的編譯器甚至不會允許因爲它不會意識到這一點)。

除了所有這些問題,如果方法名稱extractWordFour是他們應該做什麼的準確表示,它們都不會,因爲邏輯沒有意義。我建議你先思考一下:你怎麼能通過檢查字符串來判斷一個單詞何時結束?你的程序需要知道在第四個單詞之前刪除所有內容,以及之後的所有內容?

+1

第三種方法實際上會返回整個文本 - 第一個字符後的第一個字符後面的一切。 –