2013-10-17 32 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()而不是​​。

相关问题