2014-06-30 2 views
0

J'ai ce code (dans est un scanner de fichiers):Scanner File NoSuchElementException

while(in.hasNext()){ 
    for (int i = 0; i < 50; i++) { 
     for (int j = 0; j < 50; j++) { 
     System.out.println(i+", "+j); 
     String se = in.next(); 
     char c = se.charAt(0); 
     maze[i][j] = c; 
     } 
    } 
} 

et chaque fois que je le lance, il se termine à 0,49, puis me donne un NoSuchElementException. Si je diminue les 50 dans les boucles for à 49 il s'arrête à 1,0 et jette une exception. Qu'est-ce qui se passe? Que suis-je en train de faire?

Aussi, si vous devez le savoir, mon fichier que je suis en train de lire est un mur de 50x50.

+0

Qu'est-ce que 'in'? Serait-il potentiellement lire toute une ligne de texte dans votre chaîne 'se'? – Caleryn

+0

@Caleryn dans = nouveau Scanner (nouveau fichier ("C: //Users//Dragon//Desktop//maze//Maze.txt")); – user3042719

+0

@Caleryn Ah oui, il lit toute une ligne! Comment ferais-je seulement lire un personnage? – user3042719

Répondre

0

votre boucle while ne vérifie pas correctement si le scanner peut effectivement lire la ligne suivante. Chaque appel à scanner.next() doit être précédé d'un appel à scanner.hasNext() (pour garantir que l'entrée que vous lisez existe réellement). Votre code vérifie une fois tous les 50 * 50 lectures. Pour résoudre ce problème, vous allez vouloir arrêter la boucle si l'entrée n'existe pas, que ce soit en faisant quelque chose comme

while(in.hasNext()){ 
    for (int i = 0; i < 50; i++) { 
     for (int j = 0; j < 50; j++) { 
      if(!in.hasNext()) 
       break; 
      System.out.println(i+", "+j); 
      String se = in.next(); 
      char c = se.charAt(0); 
      maze[i][j] = c; 
     } 
    } 
} 

ou

while(in.hasNext()){ 
    for (int i = 0; i < 50; i++) { 
     for (int j = 0; j < 50&&in.hasNext(); j++) { 
      System.out.println(i+", "+j); 
      String se = in.next(); 
      char c = se.charAt(0); 
      maze[i][j] = c; 
     } 
    } 
} 

qui devrait à la fois vérifier avant d'appeler suivant cette entrée existe, et quitte la boucle si ce n'est pas le cas.

+0

Merci, mais j'aurais dû préciser que j'essayais de lire un caractère à la fois. Je devrais utiliser un BufferedReader, n'est-ce pas? – user3042719

+0

@ user3042719 Vous pouvez probablement utiliser un BufferedReader, bien qu'il soit plus facile de lire d'abord le fichier entier en une seule grande chaîne (en utilisant un scanner), puis d'analyser ce char par char. – clearlyspam23

+0

D'accord, je vais faire ça! Merci! – user3042719

Questions connexes