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

java.lang.NumberFormatException: null - in a do loop

我的代码中不断出现此错误,我知道它与整数不是数字有关,但我不确定如何解决此问题。我确定这是非常基本的,但我也是,所以我将不胜感激任何可能的帮助。顺便说一句,这必须在 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 个人一起读入的文件。每个 word/number 在文件中各占一行。

261
Patricia
Halangahu
1974
92
56

假设文件不包含也可能触发 NumberFormatException 的空行,请考虑您的情况:

do {
  id = filein.readLine();
  //do more stuff
} while( id != null );

您正在通过检查 id 是否为空来检查是否到达文件末尾。但是,如果 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