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个“ *”,但随后出现此错误:

**********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无效。

最佳答案

hasNextLine()
检查缓冲区中是否还有另一个linePattern
hasNext()
检查缓冲区中是否有可解析的令牌,如
由扫描仪的分隔符分隔。


由于扫描仪的定界符为空格,而linePattern为
也是空白,可能有一个linePattern在
缓冲区,但没有可解析的令牌。


资料来源:https://stackoverflow.com/a/31993534/5333805

因此,您的文件可能会有一个空的换行符,因此您尝试读取一个不存在的字符。

07-24 17:22