For循环在读取char时增加3

时间:2014-11-14 02:01:02

标签: java loops for-loop try-catch

有人能告诉我为什么每次读一个char时for循环都会增加3?

         public class Test {
              public static void main(String[] args) {
                 char ch1=' ';
                 for(int i = 0 ; i < 5; i++) {
                     try { ch1 = (char) System.in.read(); 
                     } catch(Exception e) {}
                     System.out.println(i);
                 }
              }
         }

1 个答案:

答案 0 :(得分:2)

终端只允许您一次读取整行。当您按Enter键时,它会发送标记行尾的回车换行序列(2个字符)。您可以通过将其包装在do循环中来过滤掉这些:

for (int i = 0 ; i < 5; i++) {
    do {
        try {
            ch1 = (char)System.in.read();
        } catch (Exception e) {}
    } while (ch1 == '\n' || ch1 == '\r');
    System.out.println(i);
}

请注意,如果您从System.in创建Scanner,它会提供获取整行输入的方法以及使其比处理单个字节更容易使用的其他方法。