-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");
}
}
}
イムあなたが見ることができるように、コンソールに何かを印刷してサーバーに送信します。しかし、今ではプログラムは単純にノンストップを印刷します...
なぜBufferedReaderを使用するのですか? –
なぜprintとprintlnの動作が異なると思われますか?私はあなたの問題の文脈ではほとんど同じであるので、あなたのコードの一つのバージョンで十分だと思います。 –
[forループin Javaの可能な重複は、次の入力を取る前に3回実行](http://stackoverflow.com/questions/23720118/for-loop-in-java-runs-3-times-before-taking-next-入力) –