2016-07-03 3 views
-2

nextInt()は整数だけを読み、最後に\ nを無視すると聞いたことがあります。 なぜ、次のコードは正常に実行されますか?我々は \ nはバッファに残っている必要がありますので、の値を入力した後にエラーがないのはなぜnextInt()in java

、 はそうエラーを与えるべきBでnextInt()を使用しますが、それがないではありません。どうして?

import java.util.Scanner; 

    public class useofScanner { 
    public static void main(String[] args) { 
     Scanner scanner =new Scanner(System.in); 
     int a = scanner.nextInt(); 
     int b=scanner.nextInt(); 
     System.out.println(a+b); 
    } 
    } 
+4

それは '\のN 'を無視しますが、ただ、' \のN'の上に例外をスローしません。セパレータとして扱います。 –

+0

バッファ内に何が残っていますか? –

+0

も参照してください。http://stackoverflow.com/questions/32798803/understanding-scanners-nextline-next-and-nextint-methods – Tunaki

答えて

1

スキャナは、デフォルトで空白に一致する区切り文字パターンを使用して、入力をトークンに分割します。次いで、結果として得られるトークンは、様々な次の方法を使用して異なるタイプの値に変換することができる。例えば

、このコードは、ユーザがSystem.inから数読み取ることを可能にする。別の例として

Scanner sc = new Scanner(System.in); 
int i = sc.nextInt(); 

を、このコードは長いタイプは、ファイルmyNumbersのエントリから割り当てることができます

Scanner sc = new Scanner(new File("myNumbers")); 
    while (sc.hasNextLong()) { 
     long aLong = sc.nextLong(); 
    } 

スキャナでは、空白以外の区切り文字も使用できます。この例では、文字列からのいくつかの項目を読み取ります

String input = "1 fish 2 fish red fish blue fish"; 
Scanner s = new Scanner(input).useDelimiter("\\s*fish\\s*"); 
System.out.println(s.nextInt()); 
System.out.println(s.nextInt()); 
System.out.println(s.next()); 
System.out.println(s.next()); 
s.close(); 

は、次のような出力を出力します。

1 
2 
red 
blue