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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 殷婷婷 中级黑马   /  2013-12-16 12:18  /  907 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 殷婷婷 于 2013-12-16 14:44 编辑
  1. import java.io.*;
  2. class Demo
  3. {
  4.         public static void main(String[] args)throws IOException
  5.         {
  6.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  7.                 BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
  8.                 String line = null;
  9.                 while((line=br.readLine())!=null)
  10.                 {
  11.                         bw.write(line.toUpperCase());
  12.                         bw.newLine();
  13.                         bw.flush();
  14.                 }
  15.                 br.close();
  16.                 bw.close();
  17.         }
  18. }
复制代码
上述代码如果没有bw.flush()这句的话,输入的数据将无法打印在控制台上。但是最后不是调用了close方法了吗,close方法是会刷新后再关闭流的啊,为什么数据没有刷到目的地呢?还有一个问题想问版主,我技术分是26分啊,怎么今天一打开网页,变成了25分了,怎么回事啊?

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

5 个回复

倒序浏览
借lz楼mark等答案

也忘了,,,
回复 使用道具 举报
lyn 中级黑马 2013-12-16 12:51:03
藤椅
嗯,是啊,但是我发现把bw.close()放到while循环中却能够起作用,同样求解!!技术分的问题前几天官方数据库出问题了,大家的都会少,详情贴:http://bbs.itheima.com/thread-102286-1-1.html
回复 使用道具 举报
本帖最后由 回音 于 2013-12-16 13:01 编辑

问题在于你的while是死循环,close永远不会执行,也就谈不上close前的flush了。
这句:while((line=br.readLine())!=null),你的本意是不是输入回车,产生空行,跳出循环?如果是的话这样写是做不到的。空行在输入流里表示为空字符串,也就是“”,而不是null。写成null的话循环永远不会跳出。
可以改成while(!(line=br.readLine()).equals(""))或者将“”换成其他你定义的结束标志。使用屏幕输入流的话,代码要注意不能照抄文件流的。文件流的输入结束标志可以用null,因为文件结尾是可以检测的,但屏幕输入的结束标志完全是用户定义的,一定要把这个标志写在代码里。


评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

回复 使用道具 举报
回音 发表于 2013-12-16 12:55
问题在于你的while是死循环,close永远不会执行,也就谈不上close前的flush了。
这句:while((line=br.read ...

谢谢哦,你的回答很详细,哈哈:P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马