2014-08-28 3 views
0

Je dois lire les chaînes d'un fichier et les stocker dans un tableau. Cependant, mon professeur ne permet pas à la classe d'utiliser ArrayList. J'ai donc décidé de parcourir le fichier une fois en utilisant hasNextLine() et en comptant combien de lignes il y a ensuite en créant un tableau et en le rendant égal au nombre de lignes.Java - Erreur: NoSuchElementException: Aucune ligne trouvée

Ensuite, je fait une boucle while qui vérifie si i est <= au tableau, et en donnant la array[i] une valeur de fileInput.nextLine();. Cependant, je semble constamment obtenir l'erreur NoSuchElementException: No line found.

Voici mon code:

public static void main(String[] args) throws FileNotFoundException { 
    int count = 0; 
    int i = 1; 

    //Read strings from a file and store in array 
    Scanner fileInput = new Scanner(new File("file.dat")); 

    while(fileInput.hasNextLine()) { 
     fileInput.nextLine(); 
     count++; 
    } 
    String [] strArray = new String [count]; 

    while (i <= strArray.length) { 
/*Error Here*/ strArray[i] = fileInput.nextLine(); 
      System.out.println(strArray[i]); 
      i++; 
    } 
} 
} 

Est-ce que quelqu'un sait d'une solution à mon erreur?

P.S file.dat ressemble à ceci:

FRESH 
MEAT 
EVERY 
SATURDAY 
AT 
TWELVE 
+0

Si vous avez lu toutes les lignes, il y a des lignes pas plus à lire. Créez un nouveau 'Scanner 'depuis le début. –

Répondre

0

trouvé l'erreur. Le problème a fini par être que j'ai besoin de créer une nouvelle classe de scanner.

0

La condition ne tourne pas rond

while (i <= strArray.length) 

Vous pouvez écrire

while (i < strArray.length) 
0

Comme vous l'avez indiqué, le scanner ne peut pas être réutilisé. Comme il a déjà atteint la fin du fichier.

Voici une solution alternative utilisant Java standard 7 NIO:

import java.io.IOException; 
import java.nio.charset.StandardCharsets; 
import java.nio.file.*; 
import java.util.Arrays; 

public 
class Reader 
{ 

    public static void main(String[] args) throws IOException 
    { 
     Path path = FileSystems.getDefault().getPath("file.dat"); 
     Object[] myLines = Files.readAllLines(path, StandardCharsets.US_ASCII).toArray(); 
     System.out.println(Arrays.toString(myLines)); 
    } 
} 
0

Comme vous le savez l'index d'un tableau en Java commence par zero de sorte que le dernier index des éléments seront toujours lengthOfArray - 1

Lorsque vous Supposons que votre tableau contienne 7 éléments de sorte que le premier élément soit à l'index zéro et continue à ajouter. les éléments. Puis une condition arrive quand je deviens 7 mais quand même ta boucle le permet parce que tu as spécifié i <= strArray.length donc il essaie d'ajouter un élément au septième index mais le dernier index d'un tableau sera toujours lengthOfArray - 1 dans cet exemple il sera 6 donc il ne trouve pas le septième index et lance une exception.

Pour résoudre ce juste enlever le signe égal

Scanner scannerForReading = new Scanner(new File("file.dat")); 
    while (i < strArray.length && scannerForReading.hasNextLine()) { 
     strArray[i] = scannerForReading.nextLine(); 
     System.out.println(strArray[i]); 
     i++; 
    } 
Questions connexes