黑马程序员技术交流社区

标题: 一道面试题,不太理解 [打印本页]

作者: 刘忠德    时间: 2011-12-29 21:08
标题: 一道面试题,不太理解
本帖最后由 刘忠德 于 2012-1-1 16:04 编辑

以下代码:编译、运行输入“a”(不含引号),按回车后,系统输出什么?
        public static void main(String[] args) throws Exception{
                int[] x = {1,2,3,4,5,6};
                for(int y:x){
                        System.in.read();
                        System.out.println(y);
                }
先输出123, 再输入a+回车 输出456,求解~
        }
作者: 颜宗茂    时间: 2011-12-29 21:26
read()为阻塞是方法,得等你输入才输出,为什么是这样输出就不太明白了,试了一下这个class  TT{
   public static void main(String[] args) throws Exception{
                 int[] x = {1,2,3,4,5,6};
               
                 for(int y=0,i=1;i<x.length;y=x[i],i++){
                         System.in.read();
                                                 System.out.println("java");
                         System.out.println(y);
                }

         }
}
也好奇怪结果,第一个y竟然是0;晕 ,求解。
作者: 颜宗茂    时间: 2011-12-29 21:27
额 是哦 ,第一个就是0,{:soso_e113:}
作者: 杨旭    时间: 2011-12-29 21:56
本帖最后由 杨旭 于 2011-12-29 21:57 编辑

大致研究了一下,下面是我个人理解  不一定正确 欢迎拍砖
System.in.read();这个方法一次只能接收一个输入的字符
当你什么都不输入 直接按回车时  会两个 两个的出来 也就是 12  34  56  (这里我就不换行了)
对于这个的理解只能是  windows的回车键占用了两个字符  也就是 \r 和 \n
当你随便输入一个非汉字的字符时  会三个三个的打印  也就是  123  456
当输入一个汉字时  一个汉字代表两个字符  会四个四个打印  1234  56
作者: 张建银    时间: 2011-12-29 22:15
read是按字节就行读的吧,读一个字节就打印一次,字符+回车应该是3个字节,所以打印3次
作者: 刘忠德    时间: 2012-1-1 16:04
谢谢哦,明白了~




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2