2012-12-08 53 views
1

我知道有很多關於Java的空指針異常的線程在這裏,但我仍然無法弄清是怎麼回事是什麼原因造成我的空指針異常

我試圖想出一個解決方案傳遞相關性發布在http://codekata.pragprog.com/2007/01/kata_eighteen_t.html

的傳遞相關性add_direct方法應該將char和由空格分隔的單個空格分隔的字符放入ArrayList中。然後我嘗試插入一個ArrayLists的HashMap,其中初始char是關鍵字,我的解析ArrayList是項目。這是我的NullPointerException發生的地方。我追蹤了所有這些數據結構,並沒有一個具有空值。我不明白是什麼導致我的例外。請參閱我的代碼:

public class Test_Dependencies 
{ 
    public static void main(String[] args) { 
      Dependencies Dep = new Dependencies(); 
      Dep.add_direct('A', "B C"); 
    } 
} 


public class Dependencies { 
     HashMap dependenciesList; 


public Dependencies() 
{ 
    HashMap<Character, ArrayList> dependenciesList = new HashMap<Character, ArrayList>(); 
} 

public void add_direct(char mainItem, String dependentItems) 
{ 
    String[] individualItems = dependentItems.split("\\s+"); 
    ArrayList<Character> dependendentItemsArray; 
    dependendentItemsArray = new ArrayList<Character>(); 


    //put all items into the ArrayList 
    for(int i = 0; i < individualItems.length; i++) 
    { 
     Character c = new Character(individualItems[i].charAt(0)); 
     dependendentItemsArray.add(c); 

    } 

    // insert dependency 
    Character key = new Character(mainItem); 

    ***//NULL POINTER EXCEPTION HERE 
    dependenciesList.put(key, dependendentItemsArray);*** 

} 
} 

我有點perprlexed因爲dependenciesList,關鍵還是dependentItemsArray不是空

回答

3

當你設置的構造HashMap<Character, ArrayList> dependenciesList,比類字段一個不同地圖dependenciesList。擺脫它前面的類型標識符。當您在add_direct方法中引用dependenciesList時,這是未初始化的類字段。

您可能想要了解如何在Java中使用塊範圍作用。在一個塊內聲明一個新的變量,如一個構造函數,其名稱與變量名稱相同陰影現有的聲明。

您也可能希望在未來遵循Java風格約定,以協助其他需要閱讀代碼的人員。

3

實際上,dependenciesList null。您在構造函數中初始化的變量:

HashMap<Character, ArrayList> dependenciesList = new HashMap<Character, ArrayList>(); 

僅設置局部變量,該變量在函數結束時被釋放。刪除領導類型(HashMap<Character, ArrayList>)以使其初始化實例變量。

2

您還沒有初始化您的dependenciesList。

做如下修改

public class Dependencies { 
    HashMap<Character, ArrayList> dependenciesList; 


public Dependencies() 
{ 
dependenciesList = new HashMap<Character, ArrayList>(); 
} 
.... 
} 

你正在創造內部構造一個新的HashMap,但你的類變量dependenciesList爲空

-1

您未能初始化dependenciesList。請做空檢查,然後設置任何值作爲最佳實踐。

package com.stackoverflow.examples; 

import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 

public class Dependencies { 
    public void add_direct(char mainItem, String dependentItems) { 
    String[] individualItems = dependentItems.split("\\s+"); 
    HashMap<Character, ArrayList<Character>> dependenciesList = new HashMap<Character, ArrayList<Character>>(); 
    ArrayList<Character> dependendentItemsArray = new ArrayList<Character>(); 

    // Put all items into the ArrayList 
    for (int i = 0; i < individualItems.length; i++) { 
     Character c = new Character(individualItems[i].charAt(0)); 
     dependendentItemsArray.add(c); 
    } 

    // Insert dependency 
    Character key = new Character(mainItem); 

    // Always check null before put 
    if (dependenciesList != null) 
     dependenciesList.put(key, dependendentItemsArray); 
    System.out.println("dependenciesArray---->" + dependendentItemsArray); 
    System.out.println("dependenciesList---->" + dependenciesList); 

    } 
} 

輸出:

dependenciesArray---->[B, C] 
dependenciesList---->{A=[B, C]} 
相關問題