Java system.input.read()!=-1循环永不停止

Java system.input.read()!=-1循环永不停止,java,while-loop,java-io,Java,While Loop,Java Io,我正在编写一段代码,它接受一个输入字符串并只输出所选的字符。我被要求使用system.input.read,否则我只能通过扫描或类似的方式解决。这是我的密码: import java.io.IOException; public class testing { public static void main(String[] args) throws IOException { int i; String answer = ""; w

我正在编写一段代码,它接受一个输入字符串并只输出所选的字符。我被要求使用system.input.read,否则我只能通过扫描或类似的方式解决。这是我的密码:

import java.io.IOException;

public class testing {

    public static void main(String[] args) throws IOException {
        int i;
        String answer = "";

        while ((i = System.in.read()) != -1) {
            if (i == 65 || i == 67 || i == 71 || i == 84) {
                answer = answer + (char)i;
            }
            //System.out.println(answer);
        }
        //System.out.println(answer);
    }

}
如果我把

 System.out.println(answer);
在while循环中,它会打印内容,但同一语句在while循环外不会执行任何操作,即使我用“12345”启动字符串——如果print语句不在循环中,它将永远不会执行。因此,据我所知,只有一个问题:循环从未停止

但是循环应该在到达输入字符串中的最后一项后停止。

System.input.read() 
方法假定在读取所有条目后返回-1并结束循环(我将
I!=-1作为结束条件),但显然它没有


请任何人向我解释一下我做错了什么,为什么这是错误的。这太奇怪了,我再也不想出现同样的问题。

读取
:[返回]数据的下一个字节,如果到达流的结尾,则返回-1。”好了,
stdin
将打开,直到您显式关闭它。不需要。这取决于终端,但我相信IntelliJ在Windows上,CTRL+D将关闭输入流。
System.in
仍处于打开状态,因此用户有可能稍后写入一些值。在这种情况下,应用程序需要等待来自用户的任何数据,或者直到
System.In
关闭。“我被要求使用system.input.read”但为什么?这是某种惩罚吗?您可以在最后使用“