Ciao a tutti, qualcuno mi può aiutare a capire come mai mi vengono fuori i seguenti errori quando eseguo il mio programma:
Exception in thread "main" java.util.noSuchElementException
at java.util.Scanner.throwFor<Scanner.java:817>
at java.util.Scanner.next<Scanner.java:1431>
at java.util.Scanner.nextInt<Scanner.java:2040>
at java.util.Scanner.nextInt<Scanner.java:2000>
at MiaLista.readListFromFile<MiaLista.java42>
at UsaMiaLista.main<UsaMiaLista.java:13

Il Programma è il seguente:
Un primo file contiene:

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

public class MiaLista {

private ListElem first;

public void insertFirst(int val) {// inserisce un elemento all'inizio di una lista
ListElem newelem=new ListElem();
newelem.dato=val;
newelem.next=first;
first=newelem;
} // fine di insertFirst

public void deleteFirst() { // cancella il primo elemento della lista
if(first!=null)
first=first.next;
} // fine metodo deleteFirst

public boolean inLista (int val) {
if(first==null) // verifica che la lista non è vuota e se lo è restituisce false
return false; // ovvero che non si può inserire nessun elemento in lista
else
return first.inListaIntern(val); // chiamata ricorsiva
} // fine inLista()

public boolean modifElem(int oldVal, int newVal) {
if(first==null)
return false;
else
return first.modifElemIntern(oldVal, newVal);
}

public void readListFromFile() {
try {
File inputFile=new File("dati.txt");
Scanner inputScanner=new Scanner(inputFile);
int nxtVal=0;
boolean contin=true;
while(contin) {
//try {
nxtVal=inputScanner.nextInt();
insertFirst(nxtVal);
//}
/*catch(NoSuchElementException nFE) {
contin=false;
}*/
}
}
catch(java.io.FileNotFoundException fileNotFound) {
System.out.println("il file dati.txt non esiste");
}
}

public boolean insertAfter(int precElem, int newVal) {
if(first==null) return false;
else return first.insertAfterIntern(precElem, newVal);
}

private class ListElem {
public int dato;
public ListElem next;

private boolean inListaIntern(int val) { // cerco il valore val all'interno della lista
if(dato==val) {
return true;
}
else {
if(next==null) { // se sono arrivata alla fine della lista allora
return false; // restituisce false
}
else {
return next.inListaIntern(val);
}
}
} // fine di inListaIntern()

private boolean modifElemIntern(int oldVal, int newVal) { // modifica un elemento di una lista
if(dato==oldVal) {
dato=newVal;
return true;
}
else {
if(next==null)
return false;
else
return next.modifElemIntern(oldVal, newVal);
}
}

public ListElem getNext() {
return next;
}

private boolean insertAfterIntern(int precElem, int newVal) {
if(dato==precElem) {
ListElem nuovoElemento=new ListElem();
nuovoElemento.dato=newVal;
nuovoElemento.next=next;
next=nuovoElemento;
return true;
}
else {
if(next==null) return false;
else return next.insertAfterIntern(precElem, newVal);
}
}

} // fine della classe ListElem

public void printList() { // visualizza gli elementi di una lista
for(ListElem loopElem=first; loopElem!=null; loopElem.getNext()) {
System.out.print(loopElem.dato+", ");
System.out.println("");
}
} // fine del metodo printList()


} // fine della classe MiaLista



il secondo è quello che contiene il "main":

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

public class UsaMiaLista {

public static void main(String [] args) {

Scanner tastiera=new Scanner(System.in);
int op=0; //operazione
int newval;
int oldval;
MiaLista inpList=new MiaLista();
inpList.readListFromFile();
System.out.print(" Lista iniziale: ");
inpList.printList();
while(op!=9) {
System.out.println("\n Operazioni eseguibili:\n");
System.out.println(" 1.Inserimento all'inizio\n 2.Inserimento 'dopo'");
System.out.println(" 3.Inserimento 'prima'\n 4.Cerca elemento in lista");
System.out.println(" 5.Cancellazione\n 6.Modifica\n");
System.out.println(" 9.Fine Operazioni\n ");
System.out.println("Quale operazione vuoi fare?\n");
op=tastiera.nextInt();
switch(op)
{
case 1:
System.out.println(" Elemento da inserire? ");
newval=tastiera.nextInt();
inpList.insertFirst(newval);
System.out.print(" Risultato: ");
inpList.printList();
break;
case 2:
System.out.println(" Elemento da inserire? ");
newval=tastiera.nextInt();
System.out.println(" Dopo quale elemento? ");
oldval=tastiera.nextInt();
inpList.insertAfter(oldval, newval);
System.out.print(" Risultato: ");
inpList.printList();
break;
case 9:
break;
default:
System.out.println("Operazione non prevista");
break;
} // fine dello switch
} // fine del while
} // fine del main
} // fine della classe

vi ringrazio in anticipo!