2014-10-22 62 views
0

所以我遇到了一個我正在嘗試創建的程序的問題。我不能把數據放入數組int[] serviceCode沒有錯誤如何在一個類中填充數組JAVA

Exception in thread "main" java.lang.NullPointerException 
    at Job_18028094.<init>(Job_18028094.java:24) 
    at BMAS_Main_18028094.main(BMAS_Main_18028094.java:76) 

這裏是我的代碼的相關部分。

從我公司主營:

String[] tempRecords = fileScan.nextLine().split(","); 
jobList[loopCount] = new Job_18028094(tempRecords); 

從我的班 '工作':

private int[] serviceCode; 

public Job_18028094(String[] tempRecords) { 
    serviceCode[0] = Integer.parseInt(tempRecords[6]); 
} 

要明確的事情了,那裏tempRecords[6]String保持數據(但所有的數字),並有在轉換它們之前一直使用Integer#parseInt。我研究了錯誤意味着什麼,並用它表示變量是一個'空'值,但我不確定如何改變這個或只是寫在tempRecords中的數據。

預先感謝您的幫助:)

+3

你從來沒有初始化serviceCode – 2014-10-22 07:51:50

+0

你想在你的構造函數中做什麼?在你寫的內容中,你試圖把'tempRecords'的第7個元素放在'serviceCode'的第1個單元格中(因爲整個數組沒有初始化,所以還沒有存在)。 – Joffrey 2014-10-22 07:56:54

回答

1

你必須使用它之前初始化這個array

private int[] serviceCode; // else serviceCode is null 

您可以使用

private int[] serviceCode=new int[5]; 

如果你不能確定arraylength。使用List

List<Integer> list=new ArrayList<>(); 
2

的NullPointerException異常被拋出,因爲ServiceCode陣列未初始化。數組是靜態對象,需要在任何使用之前進行初始化。另外,你應該在使用它之前提供這個數組的大小!嘗試將「大小」參數傳遞給Job_18028094構造函數。這將解決問題。

0

當您僅使用語句private int[] serviceCode;聲明一個數組時,您告訴編譯器名爲serviceCode的變量將包含一個整數數組。在這個時候,編譯並不知道該數組將保存多少個整數。所以實際內存分配保存整數不會發生在這個時候。

要開始將整數放入數組,相應的內存分配應該已經發生。只有使用以下語句初始化數組時,編譯器纔會處理此內存分配。

int[] serviceCode = new int[5] 

上述初始化之後,存儲器分配將完成的數組來保存5個整數,陣列將被填充有用於整數默認值(其爲「0」)。現在您可以開始將不同的值放入數組中。

對於你的情況,由於你還沒有初始化數組,所以當你嘗試訪問數組時,沒有發生內存分配,導致引發NullPointerException。