Fichiers/Tableaux

Résolu/Fermé
BKCelia - Modifié le 8 mai 2020 à 23:12
 BKCelia - 10 mai 2020 à 00:19
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 :

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:

4 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
8 mai 2020 à 23:20
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.
0
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)
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 mai 2020 à 23:19
Pour la taille des tableaux il ne fallait rien changer, c'est bien [10][2] qu'il faut mettre, pas [9][1].
0
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)
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
9 mai 2020 à 23:32
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é.
0
Merci beaucoup, ça marche parfaitement !
0