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);