我正在尝试使用以下代码读取文件并将行条目存储到对象中:
package eclipsePackage;
import java.io.*;
import java.util.*;
public class MainProg {
public static void main(String[] args) throws IOException{
Scanner file=null;
try{
file=new Scanner(new File("notes.txt"));
}catch(Exception e){
System.out.println("unable to open the file");
}
Ages arr[]=new Ages[5];
for(int i=0; i<5;i++){
arr[i].readData(file);
}
file.close();
System.out.println("Name"+"\t"+"Age"+"\t"+"Year of Birth");
for(int i=0;i<5;i++){
arr[i].outputData();
}
}
}
读取文件的方法位于名为Ages的类中 但我得到错误:线程“main”java.lang.NullPointerException中的异常 在eclipsePackage.MainProg.main(MainProg.java:16) 有人可以帮我解决吗?
答案 0 :(得分:0)
按照以下方式初始化数组时:
Ages arr[]=new Ages[5];
它创建了一个包含五个元素的数组,但每个元素都有一个null
值。在使用之前,您需要填充每个插槽。所以可能是这样的(取决于Ages
类的声明方式):
for(int i=0; i<5;i++){
arr[i] = new Ages();
arr[i].readData(file);
}
答案 1 :(得分:0)
在以下代码中,您将分配一个数组,但不会分配该数组的各个元素对象。然后,当您尝试访问arr [i]时,元素为空。
Ages arr[]=new Ages[5];
for(int i=0; i<5;i++){
arr[i].readData(file); // ERROR here.
}
更改为:
Ages arr[]=new Ages[5];
for(int i=0; i<5;i++){
arr[i] = new Ages(); //or whatever your constructor should be.
arr[i].readData(file);
}
这是一个常见的新手错误。在这里阅读Arrays。
答案 2 :(得分:0)
查看您的代码:
Ages arr[]=new Ages[5];
它告诉编译器您将使用名为arr
的数组。它包含类Ages
的对象。然后按new Ages[5]
初始化数组。这意味着5 Ages
个对象的内存彼此相邻分配。
但是5个对象仍未初始化。数组中的5个元素中的每一个都具有空值。
致电arr[i].readData(file);
您正在为null pointer Exception
创建空间。
你应该添加
for(int i=0;i<5;i++)
{
arr[i]=new Ages()//or call any constructor inside Ages
arr[i].readData(file)//No exception here
}