2011-10-27 50 views
1

我想做一個遞歸類,它需要一個string作爲參數,並從字符串列表返回一個以參數字符串開頭的行。如果找不到匹配,它應該返回「」。我似乎幾乎在那裏,但由於某種原因,一旦找到字符串並輸入if語句,它會返回字符串,但會跳轉到代碼中的其他語句。換句話說,由於某種原因,它不會返回它。任何幫助真的會有所幫助。Java-在遞歸類中返回字符串的問題

public String getLineStartingWith(String _string){ 

    System.out.println("GETLINESTRING: " + _string); 

    //place parameter string into local string 
    String string = _string; 

    //return the line from the stringlist if it starts with the 
    //parameter string 

    if(currentString.startsWith(_string)){ 
     System.out.println("CURRENT STRING: " + currentString); 
     return currentString; 
    } 

    restOfList.getLineStartingWith(_string); 
    return ""; 

    //return restOfList.getLineStartingWith(_string); 
} 

編輯

我做了一些改變,以我的代碼。但由於某種原因,在它返回當前字符串後,它每次都返回restOfList.getLineStartingWith(string)。我認爲它不檢測它是否爲空

public String getLineStartingWith(String string){ 

    System.out.println("GETLINESTRING: " + string); 

    //return the line from the stringlist if it starts with the 
    //parameter string 

    if(currentString.startsWith(string)){ 
     System.out.println("CURRENT STRING: " + currentString); 
     return currentString; 
    } 

    if(restOfList.isEmpty){ 
     return ""; 
    } 

    return restOfList.getLineStartingWith(string); 
} 

回答

1

你爲什麼這樣做?

//place parameter string into local string 
String string = _string; 

此代碼有完全一樣的效果:

public String getLineStartingWith(String string){ 

    System.out.println("GETLINESTRING: " + string); 
    // etc. 

字符串是不可改變的,所以你不能做任何事情壞到輸入。此外,你甚至沒有使用string(你以後的所有代碼都使用_string)。

我認爲你的問題是,這是在返回:

restOfList.getLineStartingWith(_string); 

嘗試:

return restOfList.getLineStartingWith(_string); 

你可能還需要一個處理restOfList是空的另一基本情況。

+0

因此,我剛剛離開那裏沒有理由的第一部分。我的錯。當你的意思是基本情況下,這是什麼意思? – Splitusa

+0

@SergioRa - 在遞歸中,基本情況就是你知道答案的情況。例如,在你的程序中,'if(currentString.startsWith(_string)){'部分是一個基本情況,因爲你在該點遞歸調用函數。當你有答案時,你有一個基本的例子,當你沒有答案時,你只需要一個答案。 –

+0

好吧,我開始明白,我想。所以像這樣:if(restOfList.isEmpty){return「」; }空白是一個布爾值。 – Splitusa

0

對不起,如果這可能不會回答你的問題。

在我看來,你只是想顯示所有以該特定字符串開頭的行。對於String列表中每個項目的簡單循環如何?如何這樣的事情:

for (String line : allLines) { 
    if (line.startsWith(string)){ 
     System.out.println(line); 
    } 
} 

對不起,如果這不是你想要的。