Java 使用readLine()继续获取此异常

Java 使用readLine()继续获取此异常,java,nullpointerexception,java-io,Java,Nullpointerexception,Java Io,因此,我尝试用一个BufferedReader编写一个循环,它读取下一行,将该行转换为double,然后将其添加到总和中。这将继续到文件的末尾 由于某种原因,我不断地犯这个错误 Exception in thread "main" java.lang.NullPointerException at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1017) at java.lang.Double

因此,我尝试用一个BufferedReader编写一个循环,它读取下一行,将该行转换为double,然后将其添加到总和中。这将继续到文件的末尾

由于某种原因,我不断地犯这个错误

Exception in thread "main" java.lang.NullPointerException
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1017)
    at java.lang.Double.parseDouble(Double.java:540)
以下是我的代码:

while(bReader.readLine() != null)
      {
         line = bReader.readLine();
         double num = Double.parseDouble(line);
         sum = sum + num;
         count++;
      }

在while循环中读取一个新行,该行返回null:

while(bReader.readLine() != null)
      {
         line = bReader.readLine(); // read a second line
         double num = Double.parseDouble(line);
         sum = sum + num;
         count++;
      }
改为:

while((line = bReader.readLine()) != null)
      {
         double num = Double.parseDouble(line);
         sum = sum + num;
         count++;
      }

在while循环中读取一个新行,该行返回null:

while(bReader.readLine() != null)
      {
         line = bReader.readLine(); // read a second line
         double num = Double.parseDouble(line);
         sum = sum + num;
         count++;
      }
改为:

while((line = bReader.readLine()) != null)
      {
         double num = Double.parseDouble(line);
         sum = sum + num;
         count++;
      }

在while循环中读取一个新行,该行返回null:

while(bReader.readLine() != null)
      {
         line = bReader.readLine(); // read a second line
         double num = Double.parseDouble(line);
         sum = sum + num;
         count++;
      }
改为:

while((line = bReader.readLine()) != null)
      {
         double num = Double.parseDouble(line);
         sum = sum + num;
         count++;
      }

在while循环中读取一个新行,该行返回null:

while(bReader.readLine() != null)
      {
         line = bReader.readLine(); // read a second line
         double num = Double.parseDouble(line);
         sum = sum + num;
         count++;
      }
改为:

while((line = bReader.readLine()) != null)
      {
         double num = Double.parseDouble(line);
         sum = sum + num;
         count++;
      }


readLine第二次呼叫将再次请求输入readLine第二次呼叫将再次请求输入readLine第二次呼叫将再次请求输入readLine第二次呼叫将再次请求输入readLineinput@VivekSingh为什么?
num
仅在循环中使用。因此,对于所有迭代,它将继续使用数据类型double创建变量num。从而增加了时间和空间的复杂性(如果在较小的层次上看到)。虽然它不会影响目的或输出。这是你的观点。我认为本地使用的变量应该在本地声明。@VivekSingh不,不会。检查字节码。无论将
num
的声明放在何处,都没有与该声明相对应的指令,并且方法所需的堆栈帧是在该方法的条目处分配的。你的要求没有根据。通常认为最好的做法是在尽可能小的封闭范围内声明Java变量。@VivekSingh为什么
num
仅在循环中使用。因此,对于所有迭代,它将继续使用数据类型double创建变量num。从而增加了时间和空间的复杂性(如果在较小的层次上看到)。虽然它不会影响目的或输出。这是你的观点。我认为本地使用的变量应该在本地声明。@VivekSingh不,不会。检查字节码。无论将
num
的声明放在何处,都没有与该声明相对应的指令,并且方法所需的堆栈帧是在该方法的条目处分配的。你的要求没有根据。通常认为最好的做法是在尽可能小的封闭范围内声明Java变量。@VivekSingh为什么
num
仅在循环中使用。因此,对于所有迭代,它将继续使用数据类型double创建变量num。从而增加了时间和空间的复杂性(如果在较小的层次上看到)。虽然它不会影响目的或输出。这是你的观点。我认为本地使用的变量应该在本地声明。@VivekSingh不,不会。检查字节码。无论将
num
的声明放在何处,都没有与该声明相对应的指令,并且方法所需的堆栈帧是在该方法的条目处分配的。你的要求没有根据。通常认为最好的做法是在尽可能小的封闭范围内声明Java变量。@VivekSingh为什么
num
仅在循环中使用。因此,对于所有迭代,它将继续使用数据类型double创建变量num。从而增加了时间和空间的复杂性(如果在较小的层次上看到)。虽然它不会影响目的或输出。这是你的观点。我认为本地使用的变量应该在本地声明。@VivekSingh不,不会。检查字节码。无论将
num
的声明放在何处,都没有与该声明相对应的指令,并且方法所需的堆栈帧是在该方法的条目处分配的。你的要求没有根据。通常认为在尽可能小的封闭范围内声明Java变量是最佳实践。