2016-09-03 8 views
2

を受け取ることはそう簡単なプログラムは次のようになります。はhasNextInt()の場合で確認してから入力

import java.util.*; 
public class practice { 
     static Scanner reader = new Scanner(System.in); 
     public static void main(String[] args) { 

      if(reader.hasNextInt()){ 

       int numberEntered = reader.nextInt(); 
      } 


     } 

} 

だから私は誤解を持っています。 hasNextInt()は、次の入力がになるかどうかを確認することになっています。私はこのプログラムを見ましたが、数字の入力方法はわかりません。既に入力を得るためにはreader.hasNextInt()が真である必要があり、プログラムは入力を受けていません。だから、プログラムはif文の中にどのように入りますか?

答えて

2

Scanner#hasNextInt()は、お客様の場合、blocking methodです。これは、いくつかの条件が満たされた場合にのみ待機し、戻ってくる方法であることを意味します。これは次のようになります。

public boolean hasNextInt() { 
    ... 
    boolean condition = false; 
    while(!condition) { 
     ... 
    } 
    ... 
    return stuff; 
} 

具体的には、ブロック方法はScanner#hasNext()です。それはそのdocumentationに記載されています。 メソッドがブロックされるかどうかは、Scannerソースに依存します。それが例えばSystem.inの場合、それは待機します。それがちょうどFileであるなら、それはそのファイルの終わりまでファイル全体を読んでから、ブロックしません。

だからどうしますか? if-conditionhasNextIntは、何らかの入力を待っています(Enterと入力して送信するまで)。次に、Scannerは入力をバッファ内に保存します。 hasNextIntは内部バッファをチェックしますが、バッファからは削除しません。

nextIntは、内部バッファから読み込み、内部のものも削除します。 は、先読み入力に進みます。

上記のドキュメントの中で詳しく読むことができます。短い

もの:Scanner#hasNextInt()それはtrue又はfalseを返す前に、入力を待ちます。

関連する問題