System.in.skip(2);
当用户键入字母,按Enter 键后,虽然显示只输入了一个字母,但是在系统内存中实际保存了3个ASCII码。
第一个ASCII码是用户键入的字母的ASCII码,第二个是回车的ASCII码013,第三个是换行的ASCII码010。
在这种情况下,System.in.read(); 语句会在第二、三轮循环时分别读取内存中的ASCII 码013和010,而不会要求用户键入新的字母。只有当第四轮循环时,由于键入值已循环完毕,所以停止!
ch=(char)System.in.read()
执行System.in.read()方法将从键盘缓冲区读入一个字节的数据,然而返回的16位的二进制数据,其低8位为键盘的ASCII码,高8位为0 ******** ********
代码例子:
import java.io.*; class KY5_3 { public static void main(String args[]) throws IOException { char ch; System.out.println("抽奖游戏,祝您好运!"); System.out.println("按 1、2、3 数字键后回车,可得大奖!"); System.out.println("按空格键后回车,可退出本游戏."); while ((ch=(char)System.in.read())!=' ') { System.in.skip(2); // 跳过回车键 switch (ch) { case '1': System.out.println("恭喜您得大奖,一辆汽车!"); break; case '2': System.out.println("不错呀,您得到一台笔记本电脑!"); break; case '3': System.out.println("没有白来,您得到一台冰箱!"); break; default: System.out.println("对不起,没有奖品给您!欢迎下次光临。"); } } } }