本帖最后由 Neverbelazy 于 2013-5-1 14:49 编辑
先看一段简化了的代码,需求是读取键盘输入,打印出输入结果,当输入是over时结束- import java.io.*;
- public class ReadLineTest {
- public static void main(String[] args) throws Exception{
- BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//键盘读取
- while(true){ //循环读
- System.out.println(bufr.readLine());
- if(bufr.readLine().equals("over"))//读到为over
- break;//break
- }
- }
- }
复制代码 打印结果是,输入打印要再按一次回车(或录入一行)才执行。
错误其实很明显, 可以发现, while中的 readLine()用了两次,由于readLine()是阻塞式的,再判断是否为over时,程序就等在原地,等待再次输入才继续执行。
而导致这样的错误存在的根本原因是代码书写的不够规范,在写程序时,一味的求快而忽略了是否该定义成局部变量?是否该给这个变量一个名字以备后面调用?
所以修改也很简单,而且修改后的代码也看起来更加规范,合理。- import java.io.*;
- public class ReadLineTest {
- public static void main(String[] args) throws Exception{
- BufferedReader bufr=new BufferedReader(new InputStreamReader(System.in));//键盘读取
- String line;
- while(true){ //循环读
- line=bufr.readLine();
- System.out.println(line);
- if(line.equals("over"))//读到为over
- break;//break
-
- }
- }
- }
复制代码 |