2017-03-28 91 views
3

测试我的代码时出现问题。我认为这个问题与从InputStreamReader中读取BufferedReader有关。 我用的IntelliJ,并给予下列输入:测试从输入流中读取缓冲读取器

Hello 
World! 

为什么我的程序不打印什么?这里是我的代码:

public static void main(String[] args) throws IOException { 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    Deque<String> lines = new ArrayDeque<>(); 
    String line = br.readLine(); 

    while (line != null) { 
     lines.push(line); 
     line = br.readLine(); 
    } 

    while (!lines.isEmpty()) { 
     System.out.println(lines.pop()); 
    } 
} 

回答

0

你的代码必须知道你何时完成输入。在Ubuntu的我不得不输入:

Hello 
World 

比我打STRG + d信号EOS。后来我得到的输出:

Hello 
World 
1

你陷入无限循环,因为下列条件从不计算错误:

while (line != null) { 
    lines.push(line); 
    line = br.readLine(); 
} 
3

您的代码在第一循环发臭。

为了解决这个问题,只需要修改你的循环条件是下一个:

while (line != null && !line.isEmpty()) { 
    lines.push(line); 
    line = br.readLine(); 
} 

然后你的循环将退出时,你只是打输入。您也可以添加其他exit code。如while (line != null && !line.equals("exit"))。所以当你在控制台输入你的exit codeexit在上面的例子)你的循环将停止,你会得到你想要的输出。