标题:Scanner 和System.in.read 的使用
只看楼主
java_tarena
Rank: 1
等 级:新手上路
帖 子:7
专家分:7
注 册:2010-5-9
结帖率:0
已结贴  问题点数:10 回复次数:11 
Scanner 和System.in.read 的使用
2个循环
....
Scanner scnner=new Scnner(System.in);
for(int i=0;i<10;i++){
    System.out.println(i);
    sc.next();
     }
....
//打印结果
0
//输入一个
0
//的话则打印
1
//继续输入
...
for(int i=0;i<10;i++){
  System.out.println(i);
  system.in.read();
}
..
输出结果
0
//输入0000
//打印
1
2
3
//继续输入
......

问题:
2个都是在控制台输入
为啥第一个输入只执行一次循环,而第二个代码 也是输入一次咋执行3次循环呢?
搜索更多相关主题的帖子: Scanner read System 
2010-06-05 18:24
QQ250278525
Rank: 1
等 级:新手上路
帖 子:5
专家分:9
注 册:2010-5-12
得分:1 
听说可能是开发环境的本身的漏洞,只是听说我原来问过
2010-06-06 09:08
liubangchuan
该用户已被删除
得分:1 
提示: 作者被禁止或删除 内容自动屏蔽
2010-06-06 20:58
爱OO你
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:30
专家分:181
注 册:2010-4-13
得分:1 

System.in.read()返回int,
输入时只接收一个char,如输入123 只接收1,输入abc只接收a.这句是不对的,如下句,是先转化成Unicode码表示!!!

System.in.read()方法把接收到的数据都用Unicode码表示
System.in.read接收的是字节0-255 (接收一个8进制的数),
第一个输出很简单,是输入一个数.
说一下第二个:
0000是一个8进制的数,

当你输入0000时就读了3次,再加上子循环1次,就是输出结果0 1 2 3了.



[ 本帖最后由 爱OO你 于 2010-6-7 18:53 编辑 ]

我就是我
2010-06-07 13:15
liubangchuan
该用户已被删除
得分:0 
提示: 作者被禁止或删除 内容自动屏蔽
2010-06-07 15:41
pigpigpigxk
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:26
专家分:109
注 册:2010-5-27
得分:1 
按照4楼说法,那我输入1和1f,都只接受1了,是不?
但是我当我输入1f的时候,输出是 1 2 3 4。这到底是为什么?
错了,不是只接收第一个,而是接收全部的。
2010-06-07 19:06
pigpigpigxk
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:26
专家分:109
注 册:2010-5-27
得分:0 
System.in.read()返回int,
输入时只接收一个char,如输入123 只接收1,输入abc只接收a.这句是不对的,如下句,是先转化成Unicode码表示!!!
System.in.read()方法把接收到的数据都用Unicode码表示
System.in.read接收的是字节0-255 (接收一个8进制的数),
第一个输出很简单,是输入一个数.
说一下第二个:
0000是一个8进制的数,
当你输入0000时就读了3次,再加上子循环1次,就是输出结果0 1 2 3了.
你也是错的,别忘了换行符。输入1,如果按字符输出是‘1’,‘\r’,‘\n’,所以是3次啦。所以你可以推出1f,1ff是多少次啦。
2010-06-07 19:55
baifenghan
Rank: 8Rank: 8
等 级:贵宾
威 望:10
帖 子:258
专家分:952
注 册:2006-3-17
得分:1 
第一个问题:
这个主要取决于Scanner.next()的设计,
Returns the next token if it matches the pattern constructed from the specified string.
If the match is successful, the scanner advances past the input that matched the pattern.
而在Java的类Scanner源代码中表明了它的hasNext()是如何判断是否还有下一个元素的。使用下面的正则表达式
分割输入:   
private static Pattern WHITESPACE_PATTERN = ("\\p{javaWhitespace}+");

第二个问题:
这是InputStream的一个实现中的代码:
public synchronized int read() {
    return (pos < count) ? (buf[pos++] & 0xff) : -1;
}
可以看出实际它就取得一个字节的数据。
2010-06-08 20:22
liubangchuan
该用户已被删除
得分:0 
回复 7楼 pigpigpigxk
提示: 作者被禁止或删除 内容自动屏蔽
2010-06-09 01:54
linjx0123
Rank: 9Rank: 9Rank: 9
等 级:贵宾
威 望:14
帖 子:279
专家分:1362
注 册:2006-4-7
得分:1 
这个问题我在论坛上曾经回答过了。
System.in.read();
该方法输入数值的时候,最后两个字节为回车键和换行键。
你可以用System.out.println(System.in.read());进行测试。最后两个字节为10,13,根据ascII码表,查看可知是回车和换行
2010-06-09 11:00



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-309318-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.267440 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved