Fichiers/Tableaux

Résolu
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 :

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

  1. KX Messages postés 19031 Statut Modérateur 3 020
     
    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
  2. BKCelia
     
    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
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      Pour la taille des tableaux il ne fallait rien changer, c'est bien [10][2] qu'il faut mettre, pas [9][1].
      0
  3. BKCelia
     
    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
    1. KX Messages postés 19031 Statut Modérateur 3 020
       
      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
  4. BKCelia
     
    Merci beaucoup, ça marche parfaitement !
    0