我是一名从事作业的新手java程序员。但是,我遇到了一个小错误,我似乎无法弄明白。任何帮助将不胜感激。
在这个程序中,我试图读取文件并将文件数据存储在变量中,其数组大小等于文件中的行数。
例如:如果文件中有10行,那么变量的数组大小也应该是10.存储它们之后,我想显示它们。 (我已经知道如何显示数据)。
但我有java.lang.NullPointerException
错误。
我认为我的代码中的错误存在于setVariable
类的Athlete
方法或readFile
中的main
函数中。
setVariable
方法用于将从文件中提取的数据设置为数组类型变量(名字,姓氏,身份证号码,公民身份,时间)。
readFile
函数用于从文件中读取数据,将该数据存储在临时变量中,并将临时变量的值作为参数发送到setVariable
。
该文件按相应顺序包含以下值: (“FirstName LastName IdNumber Citizenship Time”)
class Athlete
{
private
String[] firstName;
String[] lastName;
String[] citizen;
int[] id;
float[] time;
public
void Athlete(int s) //Setting the size of the array variables.
{
firstName = new String[s];
lastName = new String[s];
citizen = new String[s];
id = new int[s];
time = new float[s];
}
void setVariables(String fName,String lName, int idNumber, String citizenship, float t, int lineNumber)
{
firstName[lineNumber]=fName;
lastName[lineNumber]=lName;
id[lineNumber]=idNumber;
citizen[lineNumber]=citizenship;
time[lineNumber]=t;
System.out.println(firstName[lineNumber]+"\t"+lastName[lineNumber]+"\t"+id[lineNumber]+"\t"+citizen[lineNumber]+"\t"+time[lineNumber]);
}
}
//Main CLASS
public class marathon {
static Scanner console;
static Scanner input = new Scanner (System.in);
public static void main(String[] args) {
//STEP-1: FILE
openFile(); //Step 1.1: Open the File
System.exit(0);
}
static void openFile()
{
try
{
console = new Scanner (new File("C:/Eclipse_Wokspace/Assignment-2/src/Marathon.txt"));
//Step 1.2: Read the File
readFile();
}
catch (Exception e)
{
System.out.println("File did not open because of "+e);
}
} static void readFile()
{
int size=0;
Athlete athlete = new Athlete();
while (console.hasNext())
{
String a,b,d; int c; float e; //Read the data in the file and store them in temporary variables.
a=console.next(); //First Name
b=console.next(); //Last Name
c=console.nextInt(); //ID-Number
d=console.next(); //Citizenship
e=console.nextFloat(); //Time
//Step 1.3: Store File Data
athlete.setVariables(a, b, c, d, e, size);
size++;
}
athlete.Athlete(size);
}
}
我无法在此帖中嵌入图片的原因 Not allowing me to upload any image on this post.
答案 0 :(得分:0)
您的Athlete
构造函数需要一个size参数。但是,你第一次创建一个运动员不使用任何参数,所以这默认为Java的“默认构造函数”,除了基本上调用super之外什么都不做。
因此,您需要使用实际分配您即将填充的数组的构造函数。问题是,编写代码的方式,在您读完整个文件并尝试修改Athlete
之前,您不知道大小。
你可以采取很多方法,我可以为这个文件提出一些样式和语义修复,但我建议从单个传递文件开始获取大小,然后使用它来调用构造函数大小作为其参数。然后你可以在第二遍中安全地改变那些数组。这应该可以帮到你。