J'ai eu une exception d'exécution dans mon programme pendant que je lisais un fichier avec un scanner.
Java.util.NoSuchElementException: No line found
at Java.util.Scanner.nextLine(Unknown Source)
at Day1.ReadFile.read(ReadFile.Java:49)
at Day1.ParseTree.main(ParseTree.Java:17)
Mon code est:
while((str=sc.nextLine())!=null){
i=0;
if(str.equals("Locations"))
{
size=4;
t=3;
str=sc.nextLine();
str=sc.nextLine();
}
if(str.equals("Professions"))
{
size=3;
t=2;
str=sc.nextLine();
str=sc.nextLine();
}
if(str.equals("Individuals"))
{
size=4;
t=4;
str=sc.nextLine();
str=sc.nextLine();
}
int j=0;
String loc[]=new String[size];
while(j<size){
beg=0;
end=str.indexOf(',');
if(end!=-1){
tmp=str.substring(beg, end);
beg=end+2;
}
if(end==-1)
{
tmp=str.substring(beg);
}
if(beg<str.length())
str=str.substring(beg);
loc[i]=tmp;
i++;
if(i==size ){
if(t==3)
{
location.add(loc);
}
if(t==2)
{
profession.add(loc);
}
if(t==4)
{
individual.add(loc);
}
i=0;
}
j++;
System.out.print("\n");
}
avec Scanner
vous devez vérifier s'il y a une prochaine ligne avec hasNextLine()
alors la boucle devient
while(sc.hasNextLine()){
str=sc.nextLine();
//...
}
ce sont les lecteurs qui retournent null sur EOF
bien sûr, dans ce morceau de code, cela dépend si l'entrée est correctement formatée
Vous appelez nextLine()
et génère une exception lorsqu'il n'y a pas de ligne, exactement comme le décrit le javadoc. Il ne retournera jamais null
http://download.Oracle.com/javase/1,5.0/docs/api/Java/util/Scanner.html
Votre vrai problème est que vous appelez "sc.nextLine ()" plus de fois que le nombre de lignes.
Par exemple, si vous ne disposez que de 10 lignes d’entrée, vous ne pouvez appeler "sc.nextLine ()" que 10 fois.
Chaque fois que vous appelez "sc.nextLine ()", une ligne d’entrée sera utilisée. Si vous appelez "sc.nextLine ()" plus de fois que le nombre de lignes, vous aurez une exception appelée "Java.util.NoSuchElementException: Aucune ligne trouvée".
Si vous devez appeler "sc.nextLine ()" n fois, vous devez avoir au moins n lignes.
Essayez de changer votre code pour faire correspondre le nombre de fois que vous appelez "sc.nextLine ()" avec le nombre de lignes et je vous garantis que votre problème sera résolu.
Je rencontre aussi avec ce problème. Dans mon cas, le problème était que j’avais fermé le scanner à l’intérieur de l’un des fonctions ..
public class Main
{
public static void main(String[] args)
{
Scanner menu = new Scanner(System.in);
boolean exit = new Boolean(false);
while(!exit){
String choose = menu.nextLine();
Part1 t=new Part1()
t.start();
System.out.println("Noooooo Come back!!!"+choose);
}
menu.close();
}
}
public class Part1 extends Thread
{
public void run()
{
Scanner s = new Scanner(System.in);
String st = s.nextLine();
System.out.print("bllaaaaaaa\n"+st);
s.close();
}
}
Le code ci-dessus faisait la même chose, la solution consistait à fermer le scanner une seule fois au niveau principal.