2012-11-15 107 views
1

我有在for循環內將以下代碼以查看是否有字符串等於一個搜索字符串:比較字符串數組在JAVA

if(Data.coord[i].equals(Data.search)) 

我測試與精確值的代碼,即,如果1 = 1和其餘的代碼工作正常。它只是不喜歡字符串比較。該CONSOL給出了這個錯誤:

Exception in thread "main" java.lang.NullPointerException 
at highercoursework.Search.main(Search.java:16) 
at highercoursework.Main.main(Main.java:16) 

感謝

+3

你初始化數據嗎? – PermGenError

+1

重新啓動調試模式並設置一個斷點。 –

+0

該數組在數據類中初始化:static String [] coord = new String [100];但是,如果該數組不需要任何數據,則只需將其存儲爲空值。 – user1627774

回答

2

你有一個無人居住的元素數組中即

Data.coord[i] 

null。請注意,Data.search可能爲空,但equals()方法將處理此問題。你只需要先執行lement檢查。

+0

啊對了,我想不出一種辦法來避免這種情況。我可以做ifs首先檢查值是否爲空,然後只比較非空值? – user1627774

+1

你不應該在你知道它存在的對象上調用'equals()',因此使用我的答案中的表單。比較對象時,這被認爲是一種很好的做法。如果可能的話,總是對已知的對象調用'equals()'。 –

+0

我認爲@AdamArold是絕對正確的,邏輯上它爲您節省了麻煩加上避免了您的異常,這是更合適的方法 –

2

您應該將常數與您的參數進行比較,因爲它可以是null

例如,如果Data.search是一個常數,你正在尋找你應該這樣做:

if(Data.search.equals(Data.coord[i])) 

在這種情況下,你會不會落得試圖調用一個null參考方法,你不會需要不必要的null檢查。

+0

真棒方法 –

+0

如果兩者都爲null會怎麼樣? –

+1

在這種情況下,他必須無效檢查一個。但在這種情況下,我們知道'Data.search'是一個常量。 –

1
String[] coord = new String[100]; 

這將意味着你可以指定coord [0]的東西,但直到你做coord [0]爲空。因此空指針異常。

您可以試試。

String data= Data.coord[i]; 
if(data != null && data.equals(Data.search)) 
0

試試這個:

if(DATA != null && Data.coord[i].equals(Data.search)) 
0

閱讀理解What is a Null Pointer Exception?

如果座標[]是正確初始化的Data.coord[i]值可能爲空。您可以檢查

if(Data.coord[i] != null && Data.coord[i].equals(Data.search)) {} 
1

你能避免以下兩種方式你的問題:

  • 在這種情況下座標[I]不應該是空

    if (Data.coord[i] != null) { 
        if(Data.coord[i].equals(Data.search)) { 
    
        } 
    } else { 
        logger.error("Unexpected Behavior: coord[i] should not be null"); 
    } 
    

注意:可以用符合您要求的更適當的代碼替代記錄器消息。


  • 在這種情況下你對你的座標[I]可以爲空

這種方式不會拋出一個異常,如果Data.coord [i]是空的比較。 (假設數據。search是一個常量,不能爲空)因此,這種情況下的規則是:在優先級中使用一個String對象常量來調用方法equals。

if (Data.search.equals(Data.coord[i])) {}