2016-03-20 21 views
1

入力を受け入れるためにループを実行しています。奇妙なことに、私のバッファは空でなければならないとき、私のプログラムはヌル文字を持っていると思うようです。私は実証するために少しクラスを書いた。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回目の実行でユーザー入力を待つべきです...

ありがとうございます!

答えて

0

このコードは無意味です:whileループが終了する頃には

String s = readString(); 
while (s != null) { 
    s = readString(); 
} 

は、s nullになります、それはループが正常に完了するための唯一の方法だからです。

sの値を印刷します。つまり、値nullを印刷します。

これは、それが常に二回nullを印刷することになりますことを意味し2回反復しforループに囲まれています。

q w eは出力されませんが、入力した入力です。出力はnullnullです。 Ctrl+Dを押す前に入力する内容にかかわらず、常に。

+0

はなぜループの入力にそれが実行される二時間がかかることはありませんか? 2回目はnullです。readString()を実行するように求められているので、おそらくユーザの入力を待つべきです...(編集として質問に追加されました) –

+0

@Learning ... 'Ctrl + D 'を押すと、すべての入力を終了します。あなたは基本的に 'System.in'を閉じています。 – Andreas

0

以下のようにそれを修正します。

String s = readString(); 
while (s != null) { 
    System.out.println(s); 
    s = readString(); 
} 
関連する問題