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 :)
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. -
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 :
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)-
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é.
-
-