2017-03-28 5 views
3

J'ai des problèmes lors du test de mon code. Je pense que le problème a à voir avec l'utilisation d'une lecture BufferedReader à partir d'un InputStreamReader. je IntelliJ et donne l'entrée suivante:Test d'un lecteur mis en mémoire tampon à partir du flux d'entrée

Hello 
World! 

Pourquoi mon programme rien impression? Voici mon code:

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()); 
    } 
} 

Répondre

0

Votre code doit savoir quand vous avez fini de fournir des données. Sur Ubuntu je devais entrée:

Hello 
World 

que moi frappé Strg + D signaler EOS. Ensuite je suis arrivé la sortie:

Hello 
World 
1

Vous êtes coincé dans une boucle infinie, car la condition suivante évalue jamais false:

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

Votre code puait dans la première boucle.

Pour résoudre ce problème, il suffit de modifier votre condition de boucle pour être le prochain:

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

Ensuite, votre boucle quittera lorsque vous appuyez simplement Entrez.

Ou vous pouvez ajouter un autre exit code. Tels que while (line != null && !line.equals("exit")). Ainsi, lorsque vous entrez dans la console votre exit code (exit dans l'exemple ci-dessus) votre boucle s'arrêtera et vous obtiendrez la sortie désirée.