入力を受け入れるためにループを実行しています。奇妙なことに、私のバッファは空でなければならないとき、私のプログラムはヌル文字を持っていると思うようです。私は実証するために少しクラスを書いた。Javaの入力バッファで文字が永続化されていませんか?
NullCharTest:
package Scratch;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class NullCharTest {
public void testNullChar() throws IOException{
for (int i = 0; i < 2; i++){
String s = readString();
while (s != null) {
s = readString();
}
System.out.println(s);
}
}
private String readString() throws IOException {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
return in.readLine();
}
}
メイン:
package Scratch;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException{
NullCharTest nct = new NullCharTest();
nct.testNullChar();
}
}
出力のようなものです:
Q ワットの電子 ヌル ヌル [[編集:出力ちょうどヌルです、ニュー]]
「e」を入力した後、Ctrl + Dを入力します。
2回目の実行時にforループが入力を受け付けないのはなぜですか? sはnullではありません - それはreadString()出力を参照するように求められている新しいString参照です。おそらく私のプログラムはforループの2回目の実行でユーザー入力を待つべきです...
ありがとうございます!
はなぜループの入力にそれが実行される二時間がかかることはありませんか? 2回目はnullです。readString()を実行するように求められているので、おそらくユーザの入力を待つべきです...(編集として質問に追加されました) –
@Learning ... 'Ctrl + D 'を押すと、すべての入力を終了します。あなたは基本的に 'System.in'を閉じています。 – Andreas