当前位置: 首页 > 知识库问答 >
问题:

为什么我在hasNextLine上收到错误,但在hasNext上没有?

汤修贤
2023-03-14
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无效。

共有2个答案

越正阳
2023-03-14

在尝试获取nextInt之前,您应该检查它:

while (s.hasNextLine()) {
  if(s.hasNextInt()){
    int i = s.nextInt();
    if ( i == 9);
    {
      System.out.print("*");
    }
  }
} 
潘弘扬
2023-03-14
  • hasNextLine()检查缓冲区中是否有另一个linePattern
  • hasNext()检查缓冲区中是否有可解析的标记,由扫描仪的分隔符分隔。

由于扫描仪的分隔符是空白,而线型图案也是空白,因此缓冲区中可能有线型图案,但没有可解析的标记。

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

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

 类似资料:
  • 问题内容: 题 对于扫描仪对象,该方法返回true,而该方法返回false的结果又如何呢? 注意:根据输入文件,该方法将按预期返回结果。在似乎没有被返回正确的结果。 码 这是我正在运行的创建以下结果的代码: 输入文件 以下是我传递给此扫描仪的文件的实际内容: 结果 以下是我运行代码时控制台中显示的内容的结尾,其中包括我无法理解的部分: 问题答案: 文件末尾有一个额外的换行符。 检查缓冲区中是否还有

  • 对于scanner对象,方法返回true,而方法返回false,这是怎么回事? 注意:基于输入文件,方法按预期返回结果;似乎没有返回正确的结果。 下面是我正在运行的代码,它创建了以下结果: 以下是我要传递给此扫描仪的文件的实际内容: 以下是我运行代码时在控制台中打印的内容的结尾,包括我无法理解的部分:

  • 问题内容: ABstractMethodError的可能原因是什么? 线程“ pool-1-thread-1”中的异常java.lang.AbstractMethodError: 问题答案: 简单的答案是这样的:一些代码试图调用一个声明的方法。抽象方法没有主体,无法执行。由于您提供的信息很少,因此我无法真正详细说明如何发生这种情况,因为编译器通常会遇到此问题- 如此处所述,这意味着该类必须在运行时

  • 我正在尝试使用命令,但收到的回报是错误: 而且我很确定数据库中并不存在该表,因为数据库完全是空的和干净的。 我使用的是PHP 7.3和MySQL 8.0.18社区版,它们都是在Windows Server 2019上由AMPPS运行的。我用的是Laravel 8

  • 我正在尝试使用JUnit错误收集器报告错误。虽然我的断言失败了,但JUnit中并没有报告错误。但我在控制台中收到了“错误”信息。