java.lang.NumberFormatException:null-在do循环中

java.lang.NumberFormatException:null-在do循环中,java,numberformatexception,Java,Numberformatexception,我的代码中不断出现这个错误,我知道这与整数不是数字有关,但我不确定如何解决这个问题。我相信这是非常基本的,但我也是,所以我将感谢任何可能的帮助。顺便说一下,这必须在do循环中完成。我知道过一会儿会更好 下面是包含所需信息的代码位。多谢各位 String firstName, surname, id; int luckynumber, lockernumber, grade, age; char grade2; try { BufferedRead

我的代码中不断出现这个错误,我知道这与整数不是数字有关,但我不确定如何解决这个问题。我相信这是非常基本的,但我也是,所以我将感谢任何可能的帮助。顺便说一下,这必须在do循环中完成。我知道过一会儿会更好

下面是包含所需信息的代码位。多谢各位

    String firstName, surname, id;
    int luckynumber, lockernumber, grade, age;
    char grade2;

    try {
        BufferedReader filein = new BufferedReader(new FileReader(new File(
                "studentdetails.txt")));
        do {
            id = filein.readLine();
            firstName = filein.readLine();
            surname = filein.readLine();
            age = Integer.parseInt(filein.readLine());
            grade = Integer.parseInt(filein.readLine());
            lockernumber = Integer.parseInt(filein.readLine());
            age = 2010 - age;

        } while (id != null);

        filein.close();


    } catch (FileNotFoundException fnfe) {
        System.out.println(fnfe);
    } catch (NumberFormatException nfe) {
        System.out.print(nfe);
    } catch (IOException e) {
        System.out.print(e);
    }
编辑- 这是一个被读入的文件,但是有大约10个人。每个单词/数字在文件中都有自己的行

261
Patricia
Halangahu
1974
92
56

假设文件不包含空行,也可能触发NoMultFrimeExtExct,请考虑以下情况:

do {
  id = filein.readLine();
  //do more stuff
} while( id != null );
您通过检查id是否为null来检查是否到达了文件的末尾。但是如果
id
为空,您仍然在完成迭代,解析将失败(您已经到达文件的末尾,那么
age=Integer.parseInt(filein.readLine());
应该怎么做?)

那么你如何解决这个问题呢?一种方法是在读取id后立即添加检查:

do {
  id = filein.readLine();
  if( id == null) {
    //end of stream, stop iteration
    break;
  }

  //do more stuff

} while( true ); //you're breaking the loop from the inside already

我们不知道您正在阅读的文件的内容。检查您是否可以在
studentdetails.txt
studentdetails.txt
stackTrack
中添加内容示例,然后只有我们才能在外部帮助您注意:
age=2010-age似乎很奇怪。有了你的密码,帕特里夏现在将是36岁而不是42岁——好吧,她可能会喜欢;)你确定不同的人之间没有空行吗?如果有,您必须添加一些内容来处理该问题。它也可能返回“7”而不是“7”@Stultuske是的,这是可能的,但我只是在回答手头的问题,我故意不涵盖所有可能的错误(例如,
id
也可能有一行,但在->“损坏”文件之后也没有更多的行).谢谢你解决了这个问题,我仍然得到了正确的输出,我真的很感谢你抽出时间来帮助我谢谢:)