簡體   English   中英

為什么在hasNextLine上出現錯誤,而在hasNext上卻沒有?

[英]Why do I get an error on hasNextLine, but not on hasNext?

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

因此,您的文件可能會有一個空的換行符,因此您嘗試讀取一個不存在的字符。

在嘗試獲取nextInt之前,應先對其進行檢查:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM