NoSuchElementException:找不到行(使用hasNextLine()

时间:2016-10-27 23:59:40

标签: java java.util.scanner

我的第一次编程生命相对较短,我遇到了NoSuchElementException。我做了一些研究,我发现的所有帖子都没有追溯到类似案例。在许多情况下,编码器只有not put in hasNextLine(),从而导致异常。另一个例子是当编码器尝试read two lines consequently时,这也导致了错误。第三个尝试得到一个check for an empty line at the end的解决方案,我觉得这可能更接近我的问题。但是,我不认为这是我正在寻找的解决方案。这是我的代码:

import java.util.HashMap; import java.util.Scanner; import java.io.*;

class DVDAdministrasjon
{
  private String eier;
  private String laaner;
  private boolean utlaant;
  private String tittel;

  private HashMap<String, DVD> dvdListe = new HashMap<String, DVD>();
  private HashMap<String, Person> personListe = new HashMap<String, Person>();

  public void lesDVDarkiv(String filnavn) throws Exception
  {
    Scanner fil = new Scanner(new File(filnavn));
    String curDVD = "";
    String inData; //lagrer data fra filen

    while (fil.hasNextLine())
    {
      inData = fil.nextLine();
      while (inData.equals("")) //Hopper over eventuelle linjeskift
      {
        inData = fil.nextLine();
      }
      if (inData.equals("-"))
      {
        inData = fil.nextLine();
        personListe.put(inData, new Person(inData));
      }
      else
      {
        inData = fil.nextLine();
        curDVD = inData;
        dvdListe.put(inData, new DVD(inData));
        if (curDVD.substring(0,1).equalsIgnoreCase("*"))
        {
          utlaant = true;
        }
      }
    }
  }
}

以下是主要类:

import java.util.Scanner; import java.io.File;

class Oblig7Test1
{
  public static void main(String[] args) throws Exception
  {
    Scanner in = new Scanner(System.in);
    DVDAdministrasjon dListe = new DVDAdministrasjon();
    dListe.lesDVDarkiv("dvdarkiv2.txt");
  }
}

请记住,这个程序将远远超出现在可见的范围。它也适用于作业,但我只对我为什么会收到错误感兴趣。该文件由某些行中包含多个单词的行组成,其中包含&#34; *&#34;在一些行的开头和&#34; - &#34;作为某些行之间的分隔符。

错误如下所示:

java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Scanner.java:1540)
    at DVDAdministrasjon.lesDVDarkiv(DVDAdministrasjon.java:29)
    at Oblig7Test1.main(Oblig7Test1.java:9)

2 个答案:

答案 0 :(得分:1)

在您的代码中,我添加了一些评论

while (fil.hasNextLine())  // if it enters here it has more lines
{
  inData = fil.nextLine();  // OK can read as hasNextLine returned true
  while (inData.equals("")) 
  {
    inData = fil.nextLine();  // NO guarantee that there is a `nextLine`

如果您不完全理解您的代码,我建议您如果需要阅读下一行,那么您应该contune到循环的顶部或使用if (fil.hasNextLine())再次测试

答案 1 :(得分:0)

在你的第二个while循环中执行以下操作:

    service stop nginx
    service start nginx