正如标题所说,我在list[i].setName(name);
得到一个NullPointerException,我无法弄清楚原因。学生包含姓氏和分数。 data.txt采用第一行格式:条目数量
第二行:名称(空格)得分,第三,第四等相同
Java和Stack Overflow上的新功能,请让我知道我应该给出的其他细节。有问题的方法如下:
public static Student [] readListFromFile() {
Scanner s = new Scanner("data.txt");
File fileName;
boolean weGood = false;
while (weGood == false) {
System.out.println("Please enter the file name:");
fileName = new File(getInput()); //user can input their own filename
try {
s = new Scanner(fileName);
weGood = true;
} catch (FileNotFoundException e) {
System.out.println("File not found, please try again");
}
}
int listlength = Integer.parseInt(s.nextLine());
Student [] list = new Student[listlength];
for (int i = 0; i < list.length && s.hasNext() == true; i++) {
String name = s.next();
Double score = Double.parseDouble(s.next());
list[i].setName(name);
list[i].setScore(score);
}
return list;
}
答案 0 :(得分:4)
创建类似
的数组时 Student [] list = new Student[listlength];
然后所有数组元素最初都是null
。
因此list[i].setName(name);
抛出NullPointerException。
您需要在使用之前初始化数组元素,例如
Student [] list = new Student[listlength];
for (int i = 0; i < list.length && s.hasNext() == true; i++) {
list[i] = new Student();
...
答案 1 :(得分:0)
是的,你需要在使用之前初始化数组元素。
Student[] list = new Student[listLength];
for(int i=0;i<list.length && s.hasNext() == true;i++){
if(list[i] != null){
list[i] = new Student();
.....
}
}
在使用任何对象之前执行Null检查是一个好习惯(比如它是一个集合,字符串.etc。)