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.
    0
    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)
      0
      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].
        0
    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)
      0
      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é.
        0
    3. Merci beaucoup, ça marche parfaitement !
      0