2016-11-30 9 views
-2

2つのバージョンを試しましたが、どちらもプログラムのelse部分を繰り返し出力しています。BufferedReaderが入力をブロックしていません

バージョン1(改行付き)

try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 
    while(true) { 
     String input = br.readLine(); 
     if(input != null) { 
      SomeRequest req = new SomeRequest(); 
      req.text = input; 
      client.sendTCP(req); 
     } else { 
      System.out.println("non stop..."); <-- this continously prints 
     } 
    } 
} 

バージョン2(無改行付き)

try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 
    while(true) { 
     String input = br.readLine(); 
     if(input != null) { 
      SomeRequest req = new SomeRequest(); 
      req.text = input; 
      client.sendTCP(req); 
     } else { 
      System.out.print("non stop..."); <-- this continously prints as well? 
     } 
    } 
} 

てみましょうしようとしているバージョン3(例外がスローされます)

try(Scanner sc = new Scanner(System.in)) { 
    String input = ""; 
    System.out.println("Enter to send"); 
    while(true) { 
     if(!sc.hasNextLine()) { 
      input = sc.nextLine(); 
      SomeRequest req = new SomeRequest(); 
      req.text = input; 
      client.sendTCP(req); 
     } else { 
      System.out.println("not sending"); 
     } 
    } 
} 

イムあなたが見ることができるように、コンソールに何かを印刷してサーバーに送信します。しかし、今ではプログラムは単純にノンストップを印刷します...

+1

なぜBufferedReaderを使用するのですか? –

+0

なぜprintとprintlnの動作が異なると思われますか?私はあなたの問題の文脈ではほとんど同じであるので、あなたのコードの一つのバージョンで十分だと思います。 –

+1

[forループin Javaの可能な重複は、次の入力を取る前に3回実行](http://stackoverflow.com/questions/23720118/for-loop-in-java-runs-3-times-before-taking-next-入力) –

答えて

1

どちらのバージョンも無効です。ストリームの終わりにループを終了していません。それは次のようにする必要があります。

try(BufferedReader br = new BufferedReader(new InputStreamReader(System.in))) { 
    String input; 
    while ((input = br.readLine()) != null) { 
     SomeRequest req = new SomeRequest(); 
     req.text = input; 
     client.sendTCP(req); 
     } 
    } 
    System.out.print("End of input"); 
} 
関連する問題