2016-11-08 7 views
0

Javaのコマンドラインから文字列のリストを読み込み、その文字列を印刷しようとしています。 は、ここでは、コードです: -Javaのコマンドラインから文字列のリストを読み取る

public class Example { 
    public static void main(String args[]) throws Exception { 
    List<String> list = new ArrayList<String>(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
    String line = null; 
    while((line = br.readLine()) != null) { 
     list.add(line); 
    } 
    System.out.println(list); 
    } 
} 

しかし、それは無限ループに入り、リストを出力しません。 誰でも私のコードで間違いを指摘するのを助けてくれますか?

+2

あなたの 'while'ループには、 'あなたがヌルを入力しなければ、それは永遠に続くでしょう。したがって、文字列の入力が完了したら、コンソールからnullを入力する必要があります。あなたはctrl + Dでこれを行うことができます – rafid059

答えて

0

あります。

public class Example { 
    public static void main(String args[]) throws Exception { 
     List<String> list = new ArrayList<String>(); 
     BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); 
     String line; 
     while(true) { 
      line = br.readLine(); 
      if (line == null || line.isEmpty()) { 
       break; 
      } 
      list.add(line); 
     } 
     System.out.println(list); 
    } 
} 
+0

バグがあります。コードがEOFに当たったとき、 'BufferedReader.readLine()'は何を返しますか? –

0

コードに問題はありません。まだ正しい "信号"が得られていないため、終了しません。

入力が完了したらCtrl+Dを試してください。ほとんどの場合、うまくいくはずです。

またはCtrl+Z windowsコマンドライン。あなたは、Java 8を使用している場合

はあなたの問題を解決しますwhileループ内の終了条件を確認する短いバージョン

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.List; 
import java.util.stream.Collectors; 

public class ReadLinesFromStdin { 

    public static void main(String [] args) throws IOException { 
     List<String> lines = new BufferedReader(new InputStreamReader(System.in)) 
       .lines().collect(Collectors.toList()); 
     System.out.println(lines); 
    } 
} 
関連する問題