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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© whocases 黑马帝   /  2012-6-29 18:03  /  2656 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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,循环就结束了
我不理解为什么循环只循环了两次就结束了?
那位高手可以告诉我这是怎么回事?

4 个回复

倒序浏览
你忘记处理按回车键时隐藏输入的"\r"和"\n"了~!
回复 使用道具 举报
本帖最后由 许涛 于 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.         }
复制代码
回复 使用道具 举报
循环输入其实就是反复调用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);
            }  
          }
}

点评

注意下循环内的变量重复声明的问题,tem最好拿到循环外定义  发表于 2012-6-29 20:42
回复 使用道具 举报
我问的我朋友,自己真不会,这个是我哥们的答案

输入1敲回车符,read读取1 ,/r /n  这就输出字符对应的ASCII码表上的值 49,13,10  ,输入2敲回车符,read读取2 ,/r /n 因为只循环5次所有读到/r  就结束了 输出50,13,



原话是这样   呵呵  不懂
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马