System.in.read(),是用来接受键盘输入的,那么当我们按下Enter键来结束输入时,会发生什么呢?
其实这里面还大有文章!先让我们来看一个程序,然后再慢慢解释它的特殊所在之处!
public class Test { public static void main(String[] args) throws IOException { for(int j = 0; j < 5; j++) { System.out.println("INPUT:"); char c = ‘ ‘; try { c = (char) System.in.read(); } catch(IOException e){ } if(c == ‘1‘) { System.out.print("OK!"); } }
} }
假设我们输入1,程序的结果是: INPUT: 1 OK!INPUT: //问题:为什么输入1后会连续输出两个INPUT呢 INPUT: INPUT:
初次碰到这种问题时,我们一定会被程序的执行结果吓了一跳,明明程序如此的简单,那为什么结果跟想象的不一样呢?现在让我们一起来分析下这个程序吧!
我们把程序的结果作个标记:
结果: INPUT: 1 OK!INPUT: -------A (标记A) INPUT: -------B (标记B) INPUT: -------C (标记C)
输入1,成功读到1,所以打印出OK A处Input读到的是\r,所以继续循环 B处Input读到的是\n,继续循环 C处Input停止不动,等待我们从键盘再次输入。
=============================================================================
所以用System.in.read()时,我们在键盘上按下的任何一个键都会被当做是输入值,包括Enter键也会被当做是一个值!当我们按下Enter的时候,实际上发送两个键值:一个回车(13),一个是换行(10);
|