有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

数组在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) 个答案

  1. # 1 楼答案

    修剪绳子只是治标不治本

    出现“null”的原因在构造函数中:

    first_name=first_name+f;
    

    默认情况下,first_name字段将初始化为空值。sum运算符将其转换为“null”字符串,并将给定值f相加

    因此,要正确解决此问题,请删除总和:

    first_name=f;