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

时间:2016-03-30 08:50:08

标签: java numberformatexception

我一直在我的代码中收到此错误,我知道它与整数不是一个数字有关,但我不确定如何解决这个问题。我确信这是非常基本的,但我也是如此,我将不胜感激。顺便说一下,这必须在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

1 个答案:

答案 0 :(得分:0)

假设文件不包含空行,这也可以触发NumberFormatException考虑你的情况:

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