2013-10-05 103 views
-2

我正在寫一個方法來查找給定字符串中的大寫字母。我有這個我沒有返回一個字符串?

public static String FindUpperCase (String x){ 
for (int i = x.length(); i>=0; i--){ 
     if (Character.isUpperCase(x.charAt(i))){ 
      return x.substring(i); } 
    } 

但我得到一個錯誤,告訴我我必須返回一個字符串。當我查看API時,哪些子字符串會告訴我它返回的字符串是另一個字符串的子集......這意味着我正在返回一個字符串,對吧?我被告知,這是因爲我在循環中返回一個字符串,這不是一回事,但我有點困惑這是什麼意思,因爲不是方法中的循環?有誰知道我做錯了什麼或我該如何解決這個問題?

+1

這是抱怨,因爲如果if語句總是計算爲false,那麼你還沒有返回一個字符串。 –

+3

只有當它進入IF條件時,你的代碼才返回一個字符串。如果IF從未被執行會怎麼樣? –

+0

「查找大寫字母」是否指「第一個大寫字母后的字符串部分」? – arshajii

回答

4

不,你並不總是返回一個字符串。如果輸入是完全小寫的呢?

基本上,你需要一個return語句(或拋出異常)後的for循環,來處理你在哪裏得到它的結束的情況。即使在可能會導致您永遠不會真正到達循環結尾的情況下,Java編譯器也會遵循嚴格的可達性規則,如section 14.21 of the JLS中所述。因此,即使你return語句是無條件的,我們知道length()總是返回一個非負值,這仍然不會編譯:

public static String broken(String input) { 
    // *We* know that we'll always go into the body of the loop... 
    for (int x = input.length(); x >= 0; x--) { 
     return input; 
    } 
    // The end of the method is still reachable from the compiler's standpoint 
} 

非空法的到底能不能可達 - 你必須要麼拋出異常,要麼返回一個值。

另請注意,您的初始值應爲x.length() - 1x.charAt(i)會引發異常。您還應該更改方法名稱以遵循Java命名約定。

哦,目前您還沒有返回「大寫字母」 - 您將返回「從最後一個大寫字母開始的所有內容」,這是完全不同的。

+0

什麼!沒有!在for循環之後你需要一個'return'!' – Brian

+0

這麼快,我最終刪除了我的答案。 –

+1

@Brian WUT? ''''不是'String'。 –

2

你正在返回受到條件,所以如果條件從來沒有true你沒有返回。改爲嘗試。

public static String FindUpperCase (String x){ 
    for (int i = x.length() - 1; i>=0; i--){ 
     if (Character.isUpperCase(x.charAt(i))){ 
      return x.substring(i); } 
    return ""; 
} 

而且Java是指數從0開始,所以你for句子開始於x.length() - 1(最後一個位置),或者你會得到StringIndexOutOfBoundsException

1

考慮這樣的情況時,有給定的字符串中沒有大寫,在這種情況下,該函數不會返回任何東西。

所以就在您的for循環之後,您可以返回一個空字符串以使函數聲明有效。

1

因爲只有在Character.isUpperCase(x.charAt(i))爲真時才返回字符串。如果爲空,則必須返回空字符串。

public static String FindUpperCase (String x){ 
    for (int i = x.length(); i>=0; i--){ 
     if (Character.isUpperCase(x.charAt(i))){ 
     return x.substring(i); } 
    } 
    return ""; 
} 
1

你的問題是,你是否返回一個if語句的字符串依賴。您必須在每種可能的情況下返回一個字符串或null。只需在該函數的最後一行放置一個return null或返回""即可獲得快速而骯髒的解決方案。如果沒有發現大寫字符,最好是想想要返回什麼。