Fichiers/Tableaux
Résolu
BKCelia
-
BKCelia -
BKCelia -
Bonjour,
Mon camarade et moi essayons de créer un tableau des scores (pour un projet d'école), nous cherchons donc à lire un fichier et à le stocker dans un tableau, seulement nous n'arrivons pas à régler le problème du programme ci-dessous :
si nous retirons les deux lignes où il y a problème, le programme s'exécute, mais cela fait juste lire le fichier et ne le stock pas dans un tableau.
Merci d'avoir lu jusqu'ici :)
Mon camarade et moi essayons de créer un tableau des scores (pour un projet d'école), nous cherchons donc à lire un fichier et à le stocker dans un tableau, seulement nous n'arrivons pas à régler le problème du programme ci-dessous :
import java.io.File; import java.io.IOException; import java.util.Scanner; import acm.program.ConsoleProgram; import acm.program.*; public class reset extends ConsoleProgram{ public void (){ int Compteur = 1; int NombreScore=1; int NombreJoueur=1; String [][] Score = new String [10] [2]; File fichier = new File("Score.txt"); try{ Scanner AEntree = new Scanner(fichier); while(AEntree.hasNext()){ int reste = Compteur % 2; if(reste != 0){ Score [NombreScore] [1] = AEntree.nextLine(); //Problème à cet endroit là NombreScore = NombreScore + 1; Compteur = Compteur +1; } else { Score [NombreJoueur] [2] = AEntree.nextLine(); //Problème à cet endroit là NombreJoueur = NombreJoueur + 1; Compteur = Compteur +1; } } AEntree.close(); } catch (IOException e){ println("Erreur Traitement fichier:"+ e ); } } }
si nous retirons les deux lignes où il y a problème, le programme s'exécute, mais cela fait juste lire le fichier et ne le stock pas dans un tableau.
Merci d'avoir lu jusqu'ici :)
A voir également:
- Fichiers/Tableaux
- Renommer des fichiers en masse - Guide
- Fichiers epub - Guide
- Wetransfer gratuit fichiers lourd - Guide
- Explorateur de fichiers - Guide
- Tableaux croisés dynamiques - Guide
4 réponses
Bonjour,
Et quel est le problème ?
À la lecture du code, je pencherais pour une IndexOutOfBoundsException...
Les tableaux en Java sont indicés à partir de 0, pas 1. Donc pour un tableau de 2 cases il faut utiliser [0] et [1], mais [2] n'existe pas et plante.
Idem pour [NombreScore] et [NombreJoueur] qui doivent aller de 0 à 9.
Au passage, même si dans certains cas ça peut fonctionner, avec Scanner il faut utiliser hasNextLine() avec nextLine() et hasNext() avec next(), un mélange des deux peut entraîner des erreurs.
Et quel est le problème ?
À la lecture du code, je pencherais pour une IndexOutOfBoundsException...
Les tableaux en Java sont indicés à partir de 0, pas 1. Donc pour un tableau de 2 cases il faut utiliser [0] et [1], mais [2] n'existe pas et plante.
Idem pour [NombreScore] et [NombreJoueur] qui doivent aller de 0 à 9.
Au passage, même si dans certains cas ça peut fonctionner, avec Scanner il faut utiliser hasNextLine() avec nextLine() et hasNext() avec next(), un mélange des deux peut entraîner des erreurs.
Bonsoir,
Nous avons tenter de suivre vos conseils (car votre suggestion sur le problème était correct) et voici à quoi ressemble le programme désormais :
la même erreur s'affiche :
Nous avons tenter de suivre vos conseils (car votre suggestion sur le problème était correct) et voici à quoi ressemble le programme désormais :
import java.io.File; import java.io.IOException; import java.util.Scanner; import acm.program.ConsoleProgram; import acm.program.*; public class reset extends ConsoleProgram{ public void run(){ int Compteur = 1; int NombreScore=0; int NombreJoueur=0; int k; String [][] Score = new String [9] [1]; File fichier = new File("Score.txt"); try{ Scanner AEntree = new Scanner(fichier); while(AEntree.hasNextLine()){ int reste = Compteur % 2; if(reste != 0){ Score [NombreScore] [0] = AEntree.next(); NombreScore = NombreScore + 1; Compteur = Compteur + 1; } else { Score [NombreJoueur] [1] = AEntree.next(); NombreJoueur = NombreJoueur + 1; Compteur = Compteur + 1; } } AEntree.close(); } catch (IOException e){ println("Erreur Traitement fichier:"+ e ); } for(k = 0; k>9; k++) { println(Score[k][0] ); } } }
la même erreur s'affiche :
Exception in thread "Thread-3" java.lang.ArrayIndexOutOfBoundsException: 1 at reset.run(reset.java:27) at acm.program.Program.runHook(Program.java:1568) at acm.program.Program.startRun(Program.java:1557) at acm.program.AppletStarter.run(Program.java:1895) at java.lang.Thread.run(Unknown Source)
maintenant l'erreur est la suivante :
Exception in thread "Thread-3" java.lang.ArrayIndexOutOfBoundsException: 10
at reset.run(reset.java:22)
at acm.program.Program.runHook(Program.java:1568)
at acm.program.Program.startRun(Program.java:1557)
at acm.program.AppletStarter.run(Program.java:1895)
at java.lang.Thread.run(Unknown Source)
Exception in thread "Thread-3" java.lang.ArrayIndexOutOfBoundsException: 10
at reset.run(reset.java:22)
at acm.program.Program.runHook(Program.java:1568)
at acm.program.Program.startRun(Program.java:1557)
at acm.program.AppletStarter.run(Program.java:1895)
at java.lang.Thread.run(Unknown Source)
Dans le message "ArrayIndexOutOfBoundsException: 10", le 10 correspond à l'indice qui est utilisé, alors que l'on devrait seulement aller de 0 à 9 (pour un tableau de 10 cases).
Soit il y a trop de lignes dans le fichier, soit il est mal lu, par exemple à cause du mélange hasNext/nextLine dont j'avais également parlé.
Soit il y a trop de lignes dans le fichier, soit il est mal lu, par exemple à cause du mélange hasNext/nextLine dont j'avais également parlé.