所以我遇到了一个我想要创建的程序的问题。如果没有错误
,我无法将数据放入数组int[] serviceCode
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);
来自我的班级&#39;工作&#39;:
private int[] serviceCode;
public Job_18028094(String[] tempRecords) {
serviceCode[0] = Integer.parseInt(tempRecords[6]);
}
要清理,tempRecords[6]
中的数据为String
(但都是数字)并且在转换之前一直使用Integer#parseInt
。我研究了错误意味着什么并且已经发现它意味着变量是一个“空”&#39;值,但我不确定如何更改它或只是用tempRecords中的数据写它。
提前感谢您的帮助:)
答案 0 :(得分:2)
抛出NullPointerException,因为未初始化ServiceCode数组。数组是静态对象,需要在任何使用之前进行初始化。此外,您应该在使用之前提供此数组的大小!尝试将“size”参数传递给Job_18028094构造函数。这将解决问题。
答案 1 :(得分:1)
您必须在使用前初始化此array
。
private int[] serviceCode; // else serviceCode is null
您可以使用
private int[] serviceCode=new int[5];
如果您不确定length
的{{1}}。使用array
List
答案 2 :(得分:0)
当你使用语句private int[] serviceCode;
简单地声明一个数组时,你告诉编译器一个名为 serviceCode 的变量将保存一个整数数组。此时,编译器不会被告知阵列将保持多少个整数。因此,此时不会发生保持整数的实际内存分配。
要开始将整数放入数组中,相应的内存分配应该已经发生。只有在使用以下语句初始化数组时,编译器才会负责执行此内存分配。
int[] serviceCode = new int[5]
在上面的初始化之后,将完成内存分配以使数组保持5个整数,并且数组将填充整数的默认值(即&#39; 0&#39;)。现在您可以开始将不同的值放入数组中。
在你的情况下,由于你还没有初始化数组,所以没有发生内存分配,导致在你尝试访问数组时抛出NullPointerException。