2017-10-07 8 views
1

J'ai un fichier texte comme ceci:Scanner Java en train de lire la première ligne

1 2 
3 7 
5 8 

avec 2 numéros sur chaque ligne. Je veux faire quelque chose de différent avec le premier nombre et le second nombre. J'essaie de balayer le fichier texte et d'imprimer les numéros pour m'assurer que j'ai bien scanné. Cependant, seuls les deux premiers chiffres apparaissent (1 4), une erreur dit:

"java.util.NoSuchElementException 
    at java.base/java.util.Scanner.throwFor(Scanner.java:858) 
    at java.base/java.util.Scanner.next(Scanner.java:1497) 
    at java.base/java.util.Scanner.nextInt(Scanner.java:2161) 
    at java.base/java.util.Scanner.nextInt(Scanner.java:2115) 
    at com.company.SCC.input(SCC.java:30) 
    at com.company.SCC.<init>(SCC.java:15) 
    at com.company.Main.main(Main.java:11)" 

Je ne comprends pas quel est le problème et comment numériser le document ligne par ligne (je recycle le code le scanner et il travaillait auparavant). Je ne suis pas sûr de ce que je fais mal, toute aide serait appréciée.

try { 
     String file = "testcase1.txt"; 
     FileReader in = new FileReader(file); 
     BufferedReader br = new BufferedReader(in); 
     String s; 
     int x; 
     while ((s = br.readLine()) != null) { 
      Scanner sca = new Scanner(s); 
      x = sca.nextInt(); 
      graph.addVertex(x); 
      int y = sca.nextInt(); 
      graph.addAdjvex(x, y); 
      System.out.println(x + " " + y); 
     } 

    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
+0

Il me semble que la deuxième ligne lue par le lecteur en mémoire tampon est pas ce que tu penses. Avez-vous essayé d'oublier le scanner pendant un moment et d'imprimer simplement les lignes qui sortent du lecteur tamponné? –

+0

Que voulez-vous dire par "seulement les deux premiers numéros apparaissent (1 4)"? Le fichier que vous avez montré ne contient pas 4. Pour l'instant je devine que votre lecteur a retourné la ligne vide (peut-être un à la fin du fichier) et vous essayez de le scanner pour les nombres (qui ne sont pas là). – Pshemo

Répondre

1

Essayez

try { 
    File file = new File("testcase1.txt"); 
    Scanner sc = new Scanner(file); 
    int x, y; 
    while (sc.hasNextLine()) { 
     x = sc.nextInt(); 
     y = sc.nextInt() 
     graph.addVertex(x); 
     graph.addAdjvex(x, y); 
     System.out.println(x + " " + y); 
    } 
    sc.close(); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

Incroyable. ça a marché. Je vous remercie! Je le rendais vraiment compliqué quand ce n'était pas nécessaire. – lo1ngru

0

peut-être vous devriez appeler sc.nextLine() pour passer à la ligne suivante

1
try { 
    File file = new File("testcase1.txt"); 
    Scanner sc = new Scanner(file); 
    while (sc.hasNextLine()) { 
     int x = sc.nextInt(); 
     int y = sc.nextInt(); 
     sc.nextLine(); 
     graph.addVertex(x); 
     graph.addAdjvex(x, y); 
     System.out.println(x + " " + y); 
    } 
    sc.close() 

} catch (Exception e) { 
    e.printStackTrace(); 
}