2013-10-17 60 views
0

我知道NullPointerExceptions是您在嘗試給出它不具有的0個屬性時所得到的結果。但爲什麼我在這裏得到一個nullpointerexception?它說,它應該是在這部分代碼:NullPointerException但爲什麼

class Oblig3A{ 
    public static void main(String[]args){ 

    OrdAnalyse oa = new OrdAnalyse(); 
    String filArgs=args[0]; 
    oa.analyseMetode(filArgs); 
    } 
} 

class OrdAnalyse{ 
    void analyseMetode(String filArgs){ 

    //Begynner med aa opprette alle variabler som trengs, disse deklareres rett under. De ligger her oppe bare for at jeg skal ha oversikten over de. 
    Scanner input, innfil; 
    String[] ord, fortelling; 
    int[] antall; 
    int antUnikeOrd; 
    PrintWriter utfil; 

    //Deklarerer alle bortsett fra de som har med fil aa gjore, disse deklareres inne i en try-catch-loop (printwriter utfil og scanner innfil). 
    input=new Scanner(System.in); 
    ord=new String[5000]; 
    antall=new int[5000]; 
    antUnikeOrd=0; 

    try{ 
     innfil=new Scanner(new File(filArgs)); 
     //Naa skal jeg dele opp prosessen litt for aa faa inn funksjonaliteten for aa for eksempel sette alle ord til lowercase. 

     while(innfil.hasNext()){ 
     fortelling=innfil.nextLine().toLowerCase().split(" "); 
      for(int i=0; i<fortelling.length; i++){ 
       for(int j=0; j<5000; j++){ 
       if(fortelling[i].equals(ord[j])){ 
        antall[j]+=1; 
       }else if(!ord[j].equals(fortelling[i])){ //This is line 39 
        ord[j]=fortelling[i]; 
        antall[j]+=1; 
        antUnikeOrd+=1; 
       } 
       System.out.print(fortelling[i]); 
       System.out.print(fortelling.length); 
       } 
      } 
      } 
     }catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 
} 

堆棧跟蹤:

java.lang.NullPointerException 
    at OrdAnalyse.analyseMetode(Oblig3A.java:39) 
    at Oblig3A.main(Oblig3A.java:9) 

我現在已經證實,它的確是有問題的線路,雖然

+2

堆棧跟蹤請? – tbodt

+0

哪條特定線路獲得NPE? –

+0

最有可能來自'ord [j] .equals(fortelling [i])'你能保證'ord'中的值不爲空。還有'ord'初始化的地方?或'antall [j]'或'antUnikeOrd' –

回答

0

您在這裏創建一個字符串數組

ord=new String[5000]; 

但從來沒有任何初始化數組中的字符串。

所以這條線

}else if(!ord[j].equals(fortelling[i])){ 

會拋出NPE如果條件fortelling[i].equals(ord[j])失敗,它將作爲其詢問 「並不等於fortelling[i]null」它不能或它的罪魁禍首拋出NPE


你可以if語句改變你這個

if(fortelling[i].equals(ord[j])) 
     antall[j]+=1; 
else // remove your if statement here 
{ 
     ord[j]=fortelling[i]; 
     antall[j]+=1; 
     antUnikeOrd+=1; 
} 

好像這個fortelling[i].equals(ord[j]是假的就像說這個一樣if(!ord[j].equals(fortelling[i])

+0

如果if語句與其他語句相關聯,那麼呢? 'if(fortelling [i] .equals(ord [j])){'也可以訪問'ord'。 – Justin

+0

你可以調用'String.equals(null)',它只是返回false –

+0

Damnit。我該如何完成從文件中讀取一個單詞的任務,檢查它是否存在於ord-array中,以及它是否:在與ord-array所在的單詞相同的索引處將antall-array +1,如果它不存在:將它添加到數組的末尾? – Makri

0

假設innfilScanner

嘗試innfil.hasNextLine()而不是​​。

相關問題