2014-02-11 26 views
-1

目標是獲得一個getWord方法,該方法一次使用String Tokenizer爲每行返回一個單詞。我能夠在某種程度上工作,但當我嘗試創建鏈接列表時,我一直在收到NullPointer異常。我是一個新手,我的學校使用BasicIO程序,其中包含一個名爲ASCIIDataFile的文本閱讀器,我使用readLine方法,將每行轉換爲一個String。此外,節點類需要在以後的問題一個LINENUM,現在我也只是把0在java中創建txt中單詞的鏈表,獲得NullPointerException

public class Assign2 { 
    Node wordlist; 
    ASCIIDataFile in = new ASCIIDataFile("JavaReservedWords.txt"); 
    StringTokenizer st = new StringTokenizer(in.readLine()," "); 

    public Assign2(){ 
     createList(); 
     //printList(); 


} 


private String getWord(){ 
    int count = 1; 
    if (st.hasMoreTokens()){ //Exception @ 27 
     return st.nextToken(); 
    } 
    else{ 
     String s = in.readLine(); 
     count++; 
     st = new StringTokenizer(s," "); 
     return st.nextToken(); 
    } 

} 

private void printList(){ 
    Node ptr = wordlist; 
    while(ptr.next!=null){ ptr=ptr.next; 
    System.out.println(ptr.item); 
    } 
} 

private void createList(){ 
    while (!in.isEOF()){ 
     String word = getWord(); 
     add(word); 
    } 
} 

private void add(String word){ 
    if(wordlist ==null){ 
     wordlist = new Node(word,0,null); 
     return;    
    } 
    Node p = wordlist; 
    Node q = null; 
    while (p!=null && word.compareTo(p.item)>=0){ 
     q=p; 
     p=p.next; 
    } 
    if(q==null){ 
     wordlist = new Node(word,0,p); 
    } 
    else{ 
     q.next = new Node(word,0,p); 
    } 
} 

這裏是個例外:

Exception in thread "main" java.lang.NullPointerException 
at assign2.Assign2.getWord(Assign2.java:27 
at assign2.Assign2.createList(Assign2.java:51) 

at assign2.Assign2.<init>(Assign2.java:18) 
at assign2.Assign2.main(Assign2.java:76) 

而且specifi

+2

發佈整個異常,包括調用堆棧。 –

+0

顯然'in'是'null'。這個文本文件與你的類(jar)文件在同一個目錄中嗎? –

+0

提示:getWord的哪一行是源文件中的第27行?那裏的指針是什麼?它從哪裏來的,它怎麼可能是空的? – keshlam

回答

0

此代碼是不正確:

private void createList(){ 
    while (!in.isEOF()){ 
     String word = getWord(); 
     add(word); 
    } 
} 

isEOF()的說明: 返回如果最後真正操作因EOF失敗,否則失敗。

因此,即使我們已經在EOF,因爲上次操作成功,isEOF()將返回false。