数组在Java中从文本文件读取数据时,为什么字符串前面有null?
我正在编写一个程序,要求我从文本文件中读取数据,然后使用该数据创建一个对象,然后将其存储在二维数组中。首先,我将给您一个从文本文件中读取的数据示例
Christian
Huygens
460
ICSE
D
1
J
-3
-4
-5
请注意,实际文本文档中的行之间没有空格。现在,我必须读取这些数据并将其存储在数组Student a[30][100]
中,为此我使用了方法intialize_array()
,如下所示
void initialize_array()throws IOException
{ BufferedReader br_1=new BufferedReader(new FileReader("D1.txt"));
int i=0; //Filling only the first row
for(int j=0;j<100;j++) //Looping through all students in section A
{
String a=br_1.readLine(); //First name
if(a!=null)
{
String b=br_1.readLine(); //Surname
int c=Integer.parseInt(br_1.readLine());//School Number
String d=br_1.readLine();//Current Board
String e=br_1.readLine();//Form
int f=Integer.parseInt(br_1.readLine());//Stream
String g=br_1.readLine();//House Name
int h=Integer.parseInt(br_1.readLine());
int m=Integer.parseInt(br_1.readLine());
int n=Integer.parseInt(br_1.readLine());
Student st=new Student(a,b,c,d,e,f,g,h,m,n); //These are all the fields of the Student class
this.a[i][j]=st;
String empty=br_1.readLine();
}
}
}
总共有30个部分,一个部分最多可容纳100名学生。此代码仅适用于一个节,因此,行是预先确定的。对于特定的行/部分,我基本上是填充属于该部分的学生。完成此操作后,我使用Student类的display方法来显示该部分中的所有学生。该方法如下所示:
void display123()throws IOException
{ initialize_array();
for(int i=0;i<30;i++)
for(int j=0;j<100;j++)
{ if(a[i][j]!=null)
{
a[i][j].display();
}
}
}
学生课堂的方法display()
如下所示,以供参考:
void display()throws IOException
{
System.out.println("Name: "+first_name+" "+surname);
System.out.println("School Number :"+school_number);
System.out.println("House :"+house);
System.out.println("Current Board :"+current_board);
System.out.println("Form :"+form);
System.out.println("Stream :"+stream);
System.out.println("Late Mark(s) :"+late_mark);
System.out.println("Absent Mark(s) :"+absent_mark);
System.out.println("Present Mark(s) :"+present_mark);
}
前面方法display123()
的输出让我感到震惊。所有字符串都显示为空,如下所示
Name: nullChristian nullHuygens
School Number :460
House :nullJ
Current Board :nullICSE
Form :nullD
Stream :1
Late Mark(s) :-3
Absent Mark(s) :-4
Present Mark(s) :-5
班级学生的构造函数如下所示:
public Student(String f,String s,int ss,String c, String ff,int sss,String h,int l,int a,int p)
{ first_name=first_name+f;
surname=surname+s;
school_number=ss;
current_board=current_board+c;
form=form+ff;
stream=sss;
house=house+h;
late_mark=l;
absent_mark=a;
present_mark=p;
}
# 1 楼答案
修剪绳子只是治标不治本
出现“null”的原因在构造函数中:
默认情况下,
first_name
字段将初始化为空值。sum运算符将其转换为“null”字符串,并将给定值f
相加因此,要正确解决此问题,请删除总和: