我正在尝试从链接列表中删除特定节点。我正在尝试调用我的方法 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