线程"main" java.util.NoSuchElementException中的异常:未找到行 - 使用扫描程序输入



我正在尝试从链表中删除特定节点。 我正在尝试调用我的方法 removeNode,但是当我调用它以获取用户输入时,它给了我此错误。 有关如何解决此问题的任何建议将不胜感激!

Exception in thread "main" java.util.NoSuchElementException: No line found
    at java.util.Scanner.nextLine(Unknown Source)
    at LinkedList.removeNode(LinkedList.java:123)
    at fileIn.<init>(fileIn.java:22)
    at fileIn.main(fileIn.java:13)

链接列表类:

import java.util.Scanner;
public class LinkedList {
    public LinkedListNode front;
    public LinkedList() {
        this.front = null;
    }
    public void insertBack(String data)
    {
        if(front == null){
            front = new LinkedListNode(data);
        }
        else{
            LinkedListNode newNode = new LinkedListNode(data);
            LinkedListNode current = front;
            while(current.getNext() != null){
                current = current.getNext();
            }
            current.setNext(newNode);
        }
    }//end insertBack
    public void addAfter(LinkedListNode spot, String data)
    {
        LinkedListNode newNode;
        newNode = new LinkedListNode(data);
        newNode.next = spot.next;
        spot.next = newNode;
    }//end addAfter
    public void addBefore(LinkedListNode spot, String data)
    {
    }//end addBefore
    public void deleteAfter(LinkedListNode spot)
    {
        LinkedListNode nextNode;
        nextNode = spot.next;
        spot.next = nextNode.next;
    }//end deleteAfter

    public String showList()
    {
        sortList();
        //^-- Will sort the sum but not the nodes
        int i = 0;
        String retStr = "The nodes in the list are:n";
        LinkedListNode current = front;
        while(current != null){
            i++;
            retStr += "Node " + i + " is: " + current.getData() + " and the sum is: " + current.getSum() + "n";
            current = current.getNext();
        }
        return retStr;
    }
    public LinkedListNode findTail()
    {
        LinkedListNode current = front;
        while(current.getNext() != null){
            current = current.getNext();
        }
        return current;
    }//end findTail
    public LinkedList sortList()
    {
        LinkedListNode current = front;
        LinkedListNode tail = null;
        while(current != null && tail != front )
        {
            LinkedListNode next = current;
            for( ; next.next != tail;  next = next.next)
            {
                if(next.sum >= next.next.sum)
                {
                    long temp = next.sum;
                    String temp2 = next.data;
                    next.sum = next.next.sum;
                    next.data = next.next.data;
                    next.next.sum = temp;
                    next.next.data = temp2;
                }
            }
            tail = next;
            current = front;
        }
        return this;
    }
    public void removeNode(){
    String searchedNode;
    Scanner in = new Scanner(System.in);
    System.out.println("Enter the name you would like to remove from the list: ");
    searchedNode = in.nextLine();
    in.close();
        LinkedListNode previous = null;
        LinkedListNode current = front;
            //while there is something in the list nodes
             while (current != null)
             {
                //if the data of current is equal to the node being searched
                if(current.data.equals(searchedNode))
                {
                  //set current to the node after current
                  current = current.next;
              //if previous is equal to null(which it is)
              if (previous == null)
                  {
                  //set previous equal to current
                  previous = current;
                  }
                  else previous.next = current;
                } else {
                  previous = current;
                  current = current.next;
            }
        } //end while
    }
}

文件在类中:

import java.util.Scanner;
import java.io.*;
public class fileIn
{
   LinkedListNode front;
   LinkedList myList = new LinkedList();
   String fname;
   public static void main(String[] args)
    {
       fileIn f = new fileIn();
   }//end main

   public fileIn()
   {
      getFileName();
      readFileContents();
      System.out.print(myList.showList());
      myList.removeNode();
   }//end fileIn
   public void readFileContents()
    {
        boolean looping;
        DataInputStream in;
        String line;
        /* Read input from file and process. */
        try
        {
            in = new DataInputStream(new FileInputStream(fname));
            looping = true;
            while(looping)
             {
                /* Get a line of input from the file. */
                if (null == (line = in.readLine()))
                {
                    looping = false;
                    /* Close and free up system resource. */
                    in.close();
                }//end if
                else
                {
                myList.insertBack(line);
                }//end else
            } /* End while. */
        } /* End try. */
        catch(IOException e)
        {
            System.out.println("Error " + e);
        } /* End catch. */
    }//end readFileContents
     public void getFileName()
     {
        Scanner in = new Scanner(System.in);
        System.out.println("Enter file name please.");
        fname = in.nextLine();
        in.close();
     }//end getFileName
}//end class fileIn

问题是您正在关闭System.inScanner.close()关闭底层流)。执行此操作后,它将保持关闭状态,并且不可用于输入。您通常不希望使用标准输入执行此操作:

String searchedNode;
Scanner in = new Scanner(System.in);
System.out.println("Enter the name you would like to remove from the list: ");
searchedNode = in.nextLine();
// in.close(); // <-- don't close standard input!

此外,为了将来参考,您应该尝试创建更多最小的测试用例。它将帮助您调试并消除问题中的大量噪音。:-)

根据如何在Java中解决java.util.NoSuchElementException(以及常识),在每次next之前使用适当的hasNext方法。

在您的特定情况下,它将是这样的:

if (in.hasNextLine) {
    in.nextLine();
}

相关内容

  • 没有找到相关文章

最新更新