IO延迟导致JAVA中for循环的2次迭代

IO延迟导致JAVA中for循环的2次迭代,java,for-loop,Java,For Loop,我在测试一段代码,遇到了一些有趣的东西,我需要一些专家的意见 一个简单的程序,当输入为s时停止循环,但似乎在每个输入上循环迭代两次,我猜这是因为IO延迟。如果我错了,请纠正我 public static void main(String[] args) throws java.io.IOException { int i; System.out.println("Type s to stop."); for(i = 0; ; i++) {

我在测试一段代码,遇到了一些有趣的东西,我需要一些专家的意见

一个简单的程序,当输入为
s
时停止循环,但似乎在每个输入上循环迭代两次,我猜这是因为IO延迟。如果我错了,请纠正我

public static void main(String[] args) throws java.io.IOException {
        int i;
        System.out.println("Type s to stop.");
        for(i = 0; ; i++) {
            char value = (char) System.in.read();
            if(value=='s'){
                break;
            }
            System.out.println("Pass # " + i);
        }
    }
输出:


当您输入字符
a
作为输入时,实际上输入了两个字符

  • a
  • \n

但是,当您读取
字符时,它会一个接一个地读取。因此,它循环了两次。

有没有解释为什么它可能会循环3次?@XtremeBaumer我无法重现你在Windows上重复3次的问题。你在使用linux吗?这可能会在键入字符后追加
\r\n
。这解释了3次循环,我猜它会循环输入的字符长度+1。如果您输入
ab
,它将循环3次。我在windows上,它为输入
1
获取的字符是
49
13
10
。看起来我在windows上也得到了
\r\n
13
\r
10
\n
。所以,
a\r\n
是实际输入的内容