黑马程序员技术交流社区
标题:
键盘输入后为什么和输出的结果不一样?
[打印本页]
作者:
whocases
时间:
2012-6-29 18:03
标题:
键盘输入后为什么和输出的结果不一样?
本帖最后由 whocases 于 2012-6-29 21:04 编辑
我在试着编写从键盘接受数据的时候,忽然想多循环几次,
可是,就在我循环的时候出现了问题:
以下是我的程序:
public class ObjectTest {
public static void main(String[] args)throws IOException
{
InputStreamReader in = new InputStreamReader(System.in);
BufferedReader bufin = new BufferedReader(in);
for (int i = 0; i < 5; i++) {
int tem;
tem = bufin.read();
System.out.println(tem);
}
}
}
当编辑运行的时候,我的打算是输入1,2,3,4,5,然后输出1,2,3,4,5,可是当我输入1时,系统输出:49,13,10当我输入2时,系统输出:50,13,循环就结束了
我不理解为什么循环只循环了两次就结束了?
那位高手可以告诉我这是怎么回事?
作者:
黄连兵
时间:
2012-6-29 18:19
你忘记处理按回车键时隐藏输入的"\r"和"\n"了~!
作者:
许涛
时间:
2012-6-29 18:23
本帖最后由 许涛 于 2012-6-29 18:25 编辑
println,这个是换行,windows中的换行等价于\r\n,字符编码中,\r对应13,\n对应10,你这里循环限定5次,输入1时,其实是输入了1和换行符,即3个字母,对应49,13,10,输入2时,输出:50,13 ,接着循环就结束了
验证代码:
public static void main(String[] args) {
System.out.println('\r'+0);
System.out.println('\n'+0);
}
复制代码
作者:
陆强强
时间:
2012-6-29 18:32
循环输入其实就是反复调用InputStreamReader in = new InputStreamReader(System.in);
所以这句要放在for循环里面,其次这里的键盘录入的是字符,read()返回的tem是asc码值。你可以试试输入个a,打印的结果为97;
如果要返回输入的具体内容可以用readLine();
import java.util.*;
class ObjectTest {
public static void main(String[] args)throws IOException
{
BufferedReader bufin = null;
for (int i = 0; i < 5; i++) {
bufin= new BufferedReader(new InputStreamReader(System.in));//这里我两个流合并了
String tem = bufin.readLine();
System.out.println(tem);
}
}
}
作者:
贾飞雨
时间:
2012-6-29 22:36
我问的我朋友,自己真不会,这个是我哥们的答案
输入1敲回车符,read读取1 ,/r /n 这就输出字符对应的ASCII码表上的值 49,13,10 ,输入2敲回车符,read读取2 ,/r /n 因为只循环5次所有读到/r 就结束了 输出50,13,
原话是这样 呵呵 不懂
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2