Java BufferedReader读取行方法don';我什么也不回

Java BufferedReader读取行方法don';我什么也不回,java,console,java-io,Java,Console,Java Io,我有一个问题需要解决: 对于我的代码,当代码到达最后一行时,readLine方法不会返回任何内容。它等待我键入另一行输入 import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; public class ValidacaoDeNota

我有一个问题需要解决:

对于我的代码,当代码到达最后一行时,readLine方法不会返回任何内容。它等待我键入另一行输入

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

public class ValidacaoDeNota {
   public static void main(String[] args) throws IOException {
      BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
      BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

      String line = null;
      double num;

      Double ultimaNotaValida = null;

      while ((line=br.readLine()) != null) {
         num = Double.parseDouble(line);

         if (num < 0 || num > 10) {
            bw.write("nota invalida");
         } else if (ultimaNotaValida == null) {
            ultimaNotaValida = num;
         } else {
            bw.write("media = " + ((ultimaNotaValida+num) / 2) );
         }

         bw.write("\n");
      }

      bw.flush();
   }
}
导入java.io.BufferedReader;
导入java.io.BufferedWriter;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.io.OutputStreamWriter;
公共类ValidacaoDeNota{
公共静态void main(字符串[]args)引发IOException{
BufferedReader br=新的BufferedReader(新的InputStreamReader(System.in));
BufferedWriter bw=新的BufferedWriter(新的OutputStreamWriter(System.out));
字符串行=null;
双数;
双Ultimantavalida=null;
而((line=br.readLine())!=null){
num=Double.parseDouble(行);
如果(num<0 | | num>10){
bw.书面通知(“无效通知”);
}else if(ultimaNotaValida==null){
ultimaNotaValida=num;
}否则{
写入(“media=“+((ultimaNotaValida+num)/2));
}
写入(“\n”);
}
bw.flush();
}
}

您需要输入Ctrl/d(Windows)或Ctrl/z(Unix、Linux等)以在控制台生成流结束。然后readLine()将返回null,循环将终止。

您需要输入Ctrl/d(Windows)或Ctrl/z(Unix、Linux等)以在控制台生成流结束。然后readLine()将返回null,循环将终止。

它将等待,直到获得换行符或知道它已到达输入的末尾,是的。这就是它要做的。你的指令说要从文件中读取输入,为什么不使用FileInputStream呢?使用FileInputStream可以更容易地发现何时有输入结束。@SimonAndréForsberg比readLine()返回null更容易?如何更简单?@EJP在从
系统读取时。在
中,readLine()不会那么容易地返回null,而是会等待用户的更多输入。@EJP是的,我认为使用FileInputStream比生成Ctrl-Z/Ctrl-D作为输入更容易。但也许这只是我的问题,它会一直等到它得到一个换行符或者知道它已经到达了输入的末尾,是的。这就是它要做的。你的指令说要从文件中读取输入,为什么不使用FileInputStream呢?使用FileInputStream可以更容易地发现何时有输入结束。@SimonAndréForsberg比readLine()返回null更容易?如何更简单?@EJP在从
系统读取时。在
中,readLine()不会那么容易地返回null,而是会等待用户的更多输入。@EJP是的,我认为使用FileInputStream比生成Ctrl-Z/Ctrl-D作为输入更容易。但也许那只是我。