黑马程序员技术交流社区

标题: 键盘输入后为什么和输出的结果不一样? [打印本页]

作者: 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 ,接着循环就结束了

验证代码:
  1. public static void main(String[] args) {
  2.                 System.out.println('\r'+0);
  3.                 System.out.println('\n'+0);
  4.         }
复制代码

作者: 陆强强    时间: 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