Fichiers/Tableaux

Résolu
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. Modérateur
    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.
    1. 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)
      1. Modérateur
        Pour la taille des tableaux il ne fallait rien changer, c'est bien [10][2] qu'il faut mettre, pas [9][1].
    2. 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)
      1. Modérateur
        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é.