为什么我使用此代码获得NullPointerException?
public static void main(String args[]) throws FileNotFoundException {
int i = 0;
Job[] job = new Job[100];
File f = new File("Jobs.txt");
Scanner input = new Scanner(f);
while (input.hasNextInt()) {
job[i].start = input.nextInt();
job[i].end = input.nextInt();
job[i].weight = input.nextInt();
i++;
}
}
我在第一次运行时在while循环的第一行得到了错误。我还有一个单独的课程:
public class Job {
public int start, end, weight;
}
和文本文件:
0 3 3
1 4 2
0 5 4
3 6 1
4 7 2
3 9 5
5 10 2
8 10 1
谢谢。
答案 0 :(得分:8)
当应用程序在需要对象的情况下尝试使用null时抛出。其中包括:
抛出null,就好像它是一个Throwable值。
Job [] job = new Job [100];
截至目前,数组中的所有值均为null
。因为你没有在里面插入任何Job对象。
job[i].start = input.nextInt(); // job[i] is null.
您需要做的只是初始化一个新的Job
对象并分配给当前的index
。
变为
while (input.hasNextInt()) {
Job job = new Job();
job.start = input.nextInt();
job.end = input.nextInt();
job.weight = input.nextInt();
job[i] =job;
i++;
}
答案 1 :(得分:5)
请参阅4.12.5. Initial Values of Variables:
对于所有引用类型(§4.3),默认值为 null 。
您需要在尝试访问它之前初始化job
数组,现在就像编写null.start
一样,这当然会导致NullPointerException
。
答案 2 :(得分:4)
您刚刚初始化了一个Job
类型的数组,您尚未初始化数组中的每个元素,因此异常。
while (input.hasNextInt()) {
job[i] = new Job(); // initialize here
job[i].start = input.nextInt();
job[i].end = input.nextInt();
job[i].weight = input.nextInt();
i++;
}