A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

class Test1
{
        static int x;
        public static void main(String [] args)
        {
                                System.out.println("Please enter :");
                try{ x=System.in.read();}
                                catch(Exception e) {System.out.println(e.getMessage());}
                while(x!='w')
                {
                        System.out.println((char)x);//这里为什么x要用强制转化?
                               try{ x=System.in.read();}
                                              catch(Exception e)//会抛出异常{System.out.println(e.getMessage());}
                }
        }
}
运行时输入数字会输出相同的数字,输入字符会输出相同的字符,输入w会结束运行,但是我不明白为什么要用强制转换?System.in.read()到底是怎么用的?

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 鼓励一下~

查看全部评分

6 个回复

正序浏览
李盼 发表于 2012-6-15 14:19
你应该还没有看到IO吧,System.in是一个键盘读取流,这个调用它的read方法读取键盘输入的数据,read方法返 ...

嗯,确实还没看到IO
回复 使用道具 举报
System.in返回的是InputStream指向命令行输入的字节流,它的read方法以字节流的方式来读取命令行的输入的数据。也就是说,输入的字符,以字节流的方式从命令行传递给变量x,因此此时x是一个整数(字节流以整数的方式来表示)。System.in.read()返回的是输入数值的 ASCII 码(一个 int 整数),所以要进行强制转换。System.in.read()可以实现输入字符,返回字符的Unicode码,但是缺点是只能输入一个字符
回复 使用道具 举报
如果不强制转换将会输出字符的ASC码 而不是字符
回复 使用道具 举报
System.in.read()是一个输入字节流,只支持1字节输入,即8位,若超过1字节则在转换为2进制时将被舍去高位,保留最后8位!即只返回一个整型字节数据,该数据表示的是字节因此是Unicode的第一个字节或是字符的ASCII码值。该方法是从一个流中一个一个的读取数据,因此是一个迭代的过程。我们可以看出in是一个静态的流,因此在该程序中只有一个流,重复调用System.in.read()实际上是在遍历该流中的每一个字节数据。最常见的流是键盘输入流。我们可以重复调用System.in.read()来读取从键盘输入的字符串中的字符所代表的字节(ASCII值)。用System.in.read()时,我们在键盘上按下的任何一个键都会被当做是输入值,包括Enter键也会被当做是一个值!
回复 使用道具 举报
本帖最后由 李盼 于 2012-6-15 14:24 编辑

你应该还没有看到IO吧,System.in是一个键盘读取流,这个调用它的read方法读取键盘输入的数据,read方法返回的是一个int型的,是这个字符对于的ASC码表的值,如果你不转换的话,输出的就是它ASC码表的值,而不是这个字符!
例如是输出a,  输出时没转换,就是97。
97就是a字符对应的asc码表的值。

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
System.out.println((char)x);//键盘输入的字符会转换成ASC码的形式存储,如果直接输出,会输出的是字符对应的asc码。所以强制转换为char类型,输出字符

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 鼓励 一下~~~

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马