2017-02-05 69 views
-1

我有一個「#」和「。」的二維數組。我正在傳入一個方法,然後我嘗試遍歷數組,並查找其中有多少個「#」。使用.equals時,我不斷收到NULLPOINTER異常。該方法應該返回數組中的「#」數量。我嘗試迭代2d數組,然後將2d轉換爲單維數組,並且仍然得到EXCEPTION我不知道我做錯了什麼,任何幫助將不勝感激。 我的代碼是:在java中使用.equals字符串引發NullPointer異常?

公共靜態INT countSeats(字符串[] [] AUD){

int openSeats = 0; 

    String [] audit; 
    audit = new String[120]; 

    int k = 0; 
    for(int i= 0; i < aud.length; i++) 
     for(int j = 0; j < aud[i].length; j++) 
      audit[k++] = aud[i][j]; 

    for(int i= 0; i <= audit.length; i++){ 
     openSeats = audit[i].equals("#")? +1:+0; 
    } 
return openSeats; 

回答

2

你得到的,因爲你的循環狀況異常:

for(int i= 0; i <= audit.length; i++){ 

注意如何您正在使用<=而不是<。你遍歷整個audit數組,然後比你應該多一個,導致NullPointerException。

+0

即使將符號更改爲<,異常仍然被拋出。編譯器似乎指向openSeats = audit [i] .equals(「#」)? +1:+0;我很確定這是檢查數組內容的一種可靠方法。每次迭代應該返回一個字符串,該字符串應該使用.equals方法與「#」進行比較,但我必須完全忽略某些內容。 –

+0

如果您想增加值,請執行openSeats + = audit [i] .equals(「#」)? 1:0;'或者使用'if'和'openSeats ++'。 你現在得到的NullPointer異常可能是因爲'audit.length'總是120,這就是你定義它的原因。你實際上應該檢查'audit [i]'是否爲空,因爲你需要依賴它來知道你的數組在哪裏結束。否則,你可以使用ArrayList,而不必自己檢查空值。 – user2896976

0

事實上,你聲明String []審計,使得解決方案變得更加複雜,因爲你可能試圖在一維思想中輸出所有二維數據,它會爲你簡化問題,但它不會。停留在2-d內,做搜索

int openSeats = 0; 
    for(int i= 0; i < aud.length; i++) 
    { 
     for(int j = 0; j < aud[i].length; j++) 
     { 
      if(aud[i][j].equals("#")) 
      { 
       openSeats++; 
      } 
     } 
    } 
    return openSeats; 
0

正如其他人所指出的那樣,您運行的for循環一次迭代額外具有i <= audit.length;而不是i < audit.length;。另外,作爲一種良好的做法,始終將String文字保留在方法調用的左側。例如。而不是aud[i][j].equals("#"),請做"#".equals(aud[i][j])以避免任何NPE的可能性。