2017-02-15 35 views
0
for(int i = 0 ; i < 10 ; i++) 
{ 
out.println(9); 
} 

out.close(); 

while (s.hasNextLine()) { 
    int i = s.nextInt(); 
    if (i == 9); 
    { 
    System.out.print("*"); 
    } 
} 

s.close(); 

は、それはまだ "*" 10を出力し、しかし、私はその後、このエラーが出る:hasNextLineではエラーが発生しますが、hasNextではエラーが発生しないのはなぜですか?

**********java.util.NoSuchElementException 
at java.util.Scanner.throwFor(Unknown Source) 
at java.util.Scanner.next(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at java.util.Scanner.nextInt(Unknown Source) 
at insertionSort.main(insertionSort.java:18) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
at java.lang.reflect.Method.invoke(Unknown Source) 
at edu.rice.cs.drjava.model.compiler.JavacCompiler.runCommand(JavacCompiler.java:272) 

しかし、私はのhasNextの代わりhasNextLineを使用している場合、それが正常に動作します。

なぜhasNextが動作するのだろうと思っていますが、hasNextLineはそうではありません。

+0

変数 's'とは何ですか? –

+0

は、ファイルをスキャンするスキャナです – Secret

答えて

0

は、あなたはそれを取得しようとする前にnextIntを確認する必要があります。

while (s.hasNextLine()) { 
    if(s.hasNextInt()){ 
    int i = s.nextInt(); 
    if (i == 9); 
    { 
     System.out.print("*"); 
    } 
    } 
} 
1
  • hasNextLine() チェックをバッファ内の別のlinePatternがあるかどうかを確認します。
  • hasNext() は、バッファに解析可能なトークンがあるかどうかをチェックします( はスキャナの区切り文字で区切られています)。

スキャナの区切り文字は空白であり、ラインパターンが も空白であるため バッファにラインパターンが、無解析可能なトークンがあるようにするために、それが可能です。

出典:あなたがそこにない文字を読み取ろうとしてhttps://stackoverflow.com/a/31993534/5333805

だからあなたのファイルが空改行を持つことができます。

関連する問題