2012-12-16 226 views
0

在下面的代碼中,我檢查給定的URL是否以允許的文件類型結尾(可能的類型:.jpg,.jpeg,.png & .gif)。類型列表保存在保存來自UI的文本描述的數組列表中(例如「JPG圖像」)。函數在它應該返回時不返回布爾值

我的意圖是使函數遍歷帶有描述的列表,並使用相應的URL檢查方法檢查URL。

我希望這段代碼能夠正常工作,因爲我相信每個場景都已經被考慮到了:如果是JPG,PNG或GIF,它將返回true,否則返回false。它仍然有一個錯誤:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Unresolved compilation problem: 
This method must return a result of type boolean 

這顯然意味着返回某處出錯了。我忽略了什麼?

private boolean isImageURL(ImageURL url) { 
    for (String type : fileTypes) { 
     if (type.equalsIgnoreCase("JPG Images")) { 
      if (url.isJPG() || url.isJPEG()) { 
       return true; 
      } 
     } else if (type.equalsIgnoreCase("PNG Images")) { 
      if (url.isPNG()) { 
       return true; 
      } 
     } else if (type.equalsIgnoreCase("GIF Images")) { 
      if (url.isGIF()) { 
       return true; 
      } 
     } else { 
      return false; 
     } 
    } 
} 

回答

6

所有可能的執行路徑不包括在內。例如,如果類型是「JPG圖像」,但url不是JPG或JPEG,則該方法不會返回任何內容。

刪除最後的else子句,並在該方法結束時簡單地返回false

+0

另外,如果fileTypes設置不正確 – colinjwebb

+0

@colinjameswebb請詳細說明一下嗎? –

+1

@owlstead如果fileTypes是一個可迭代的,大小爲零,for循環內的代碼永遠不會運行。 – colinjwebb

4

嘛,簡單,如果嵌入的「葉子」 if語句之一爲表達式返回false,那麼應用程序不會得到一個return語句。 for循環也可能不會執行。

要解決此問題,請將return false移至該方法的末尾,並且應該沒問題。

0

這是你的if S的一個:

else if (type.equalsIgnoreCase("PNG Images")) { 
     if (url.isPNG()) { 
      return true; 
     } 
     //otherwise... return what? (error here, put return false here) 
    } 

你也可以擺脫過去else的,只是返回false。