簡體   English   中英

Java遞歸方法,一次無字符串輸出一個字符串中的一個單詞

[英]Java recursive method to print one word in a string at a time without loops

對於此程序,其想法是使用遞歸方法一次在一個字符串中打印一個單詞,假設空格之間只有一個單詞。 但是,當我按原樣運行此程序時,它將打印字符串本身。

public static void stringByWords(String s) {


    if (s.isEmpty())

        return;

    if (s.indexOf(" ") == 1)

     stringByWords(s.substring(s.indexOf(" ") + 1) + "\n");

    System.out.println(s);


}//end stringByWords

我意識到,僅通過循環將其作為迭代方法來進行操作會容易得多,但是我需要按照指示使用遞歸。 關於我做錯了什么的任何提示將不勝感激。

遞歸的技巧是遵循標准模式

func(context)
    if context is very simple
        process context
    else
        break context into several pieces
            call func on each piece

因此,對於您的情況,簡單的情況是一個單詞沒有空格。 否則,分成兩部分,並呼吁每一部分:

void printWords(String str) {
    int space = str.indexOf(' ');
    if (space == -1) {
        System.out.println(str);
    } else {
        printWords(str.substring(0, space));
        printWords(str.substring(space + 1));
    }
}

好了,從給出的提示中修正了我的代碼之后,它似乎可以正常運行。 我將把固定的代碼放在這里,以防對他人有所幫助。 感謝那些幫助過的人。

public static void stringByWords(String s) {

    int space = s.indexOf(' ');

    if (s.isEmpty()) //error case

        return;

    if (space == -1) { //base case

        System.out.println(s);
    }
    else { 

        stringByWords(s.substring(0, space));//recursive steps
        stringByWords(s.substring(space + 1));

    }//end else


}//end stringByWords

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM