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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Neverbelazy 于 2013-5-1 14:49 编辑

先看一段简化了的代码,需求是读取键盘输入,打印出输入结果,当输入是over时结束
  1. import java.io.*;
  2. public class ReadLineTest {
  3.         public static void main(String[] args) throws Exception{
  4.                 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//键盘读取
  5.                 while(true){ //循环读
  6.                         System.out.println(bufr.readLine());
  7.                         if(bufr.readLine().equals("over"))//读到为over
  8.                                 break;//break
  9.                          }
  10.                 }
  11.        }
复制代码
打印结果是,输入打印要再按一次回车(或录入一行)才执行。

错误其实很明显, 可以发现, while中的 readLine()用了两次,由于readLine()是阻塞式的,再判断是否为over时,程序就等在原地,等待再次输入才继续执行。

而导致这样的错误存在的根本原因是代码书写的不够规范,在写程序时,一味的求快而忽略了是否该定义成局部变量?是否该给这个变量一个名字以备后面调用?
所以修改也很简单,而且修改后的代码也看起来更加规范,合理。
  1. import java.io.*;
  2. public class ReadLineTest {
  3.         public static void main(String[] args) throws Exception{
  4.                 BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//键盘读取
  5.                 String line;
  6.                 while(true){ //循环读
  7.                         line=bufr.readLine();
  8.                         System.out.println(line);
  9.                         if(line.equals("over"))//读到为over
  10.                                 break;//break
  11.                         
  12.                 }
  13.         }
  14. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

1 个回复

倒序浏览
学习了 楼主真心很给力 我经常图简便  ,今天看到你的这个感慨 真心受教了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马