0

私はScannerクラスを使用して入力を取得しています。in.next()を使用して、1行のすべての単語を取得しようとしています。nextLine()を使用して実行できることは知っていますが、in.next()とin.hasNext()がどのように機能するかを理解したいと思います。

System.out.println("What is designation");
        String desg = in.next();      
        while(in.hasNext()){
            desg+=in.next();      
        }

として出す

What is designation
member technical staff\n
^Z
Hello abhishek kumarNext year you will be 22Salary is 30000.0Designation is membertechnicalstaff

しかし、私が使用する場合

System.out.println("What is designation");
        String desg = in.next();      
        if(in.hasNext()){
            desg+=in.next();      
        }

それは次のように出力を与えます

What is designation
member technical staff
Hello abhishek kumarNext year you will be 22Salary is 44254.0Designation is membertechnical

最初のケースでは、すべての単語を取得していますが、次の入力を要求し続け、CTRL+Zを使用して入力の終了を指定する必要があります。しかし、2番目のケースでは、最後の単語(スタッフ)を取得していません。説明してください。

4

3 に答える 3

3

最初のコードは、whileループ内で入力を読み取ります。つまり、が見つかるまで読み取りますin.hasNext() == false

2番目のコードはif条件を使用しています-in.next()最大で1回読み取ります(最初の読み取り後)。

in.next()したがって、2番目のコードは、2番目のコードスナップとは異なり、入力がなくなるまでではなく、1回だけ要求するため、「新しい入力を待機」していません。


PS String desg = in.next();(最初のコードスナップの)行は、次の2つの理由から悪い習慣であることに注意してください。

  1. 空の入力では失敗します。
  2. これは、whileループの内容とのコード重複です。
于 2013-02-02T07:57:02.720 に答える
2

in.next()問題は、それを使用するifことで1回だけ実行され、次のトークンnext()のみを返すことです。

したがって、2番目のケース:( if1) この部分でメンバーの技術スタッフString desg = in.next();を入力すると: のみmemberが割り当てられdesg 、入力後にif次のトークン(技術的)をチェックし、前の文字列と連結するため、次のdesg+=in.next() ようにdesgなりますmembertechnical

于 2013-02-02T07:57:53.990 に答える
0

APIのクラスの詳細を知りたい場合は、javadocが最適なソースです。これがScannerのjavadocです

public String next()

このスキャナーから次の完全なトークンを見つけて返します。完全なトークンの前後には、区切り文字パターンに一致する入力があります。このメソッドは、hasNext()の前回の呼び出しがtrueを返した場合でも、入力がスキャンされるのを待っている間にブロックされる可能性があります。

于 2013-02-02T07:54:26.543 に答える