2014-10-22 54 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。