2017-03-26 5 views
-1

Je suis en train de charger un fichier CSV dans un tableau 2D, mais quand je vais l'appeler dans le principal je reçois l'erreurdéfaut de charge .csv dans un tableau 2d

Exception dans le thread « principal "java.lang.ArrayIndexOutOfBoundsException: 0

dans mon code alors que le fichier a une ligne suivante, il se sépare de la ligne, les stocke dans un tableau de chaînes qui, à son tour être déplacé vers le tableau 2D. Je ne comprends pas comment il peut y avoir une erreur. Quelqu'un veut-il expliquer ou suis-je juste très dense?

public int rows = 0; 
public int cols = 0; 
public String[][] filetable = new String[rows][cols]; 

public void set_Array(File example) 
{   
    try 
    { 
     FileReader file = new FileReader(example); 
     Scanner sc = new Scanner(file); 

     if(sc.hasNextLine()) 
     { 
      String[] tokens = sc.nextLine().split(","); 
      cols = tokens.length; 
      rows++; 
     } 

     while(sc.hasNextLine()) 
     { 
      rows++; 
      sc.nextLine();     
     } 
    } 
    catch (FileNotFoundException e) 
    { 
     System.out.println(e); 
    } 

} 
public void to_Array(File example) 
    { 
     try 
     { 
      FileReader file = new FileReader(example); 
      Scanner sc = new Scanner(file); 

      int r = 0; 
      while(sc.hasNextLine()) 
      { 
       String[] tokens = sc.nextLine().split(","); 
       for(int c = 0; c < cols; c++) 
        {filetable[r][c] = tokens[c];} 

       r++; 
      } 

     } 

       catch (FileNotFoundException e) 
     { 
      System.out.println(e); 
     } 
    } 
+0

Le problème est probablement avec 'filetable', mais vous ne nous montrez jamais comment' filetable' est configuré. De plus, vous dites que vous utilisez une autre méthode pour calculer 'cols', mais vous ne nous laissez pas savoir ce que c'est. Bottom line: vous ne nous avez pas donné assez d'informations pour vous aider. – ajb

+0

Désolé! Va réparer ça maintenant! – JAVANOOB

+1

Lorsque vous créez 'fichable',' rows' et 'cols' sont tous les deux 0, car' filetable' est créé lors de la construction de votre objet. Essayez d'assigner 'filetable = new String [rows] [cols];' après que 'rows' et' cols' ont été calculés. En outre, votre méthode nécessite de parcourir deux fois le fichier d'entrée entier, ce qui n'est pas idéal. L'utilisation d'un ArrayList vous aidera à créer un tableau dont la taille peut augmenter de façon dynamique, de sorte que vous n'avez pas à calculer le nombre de lignes. – ajb

Répondre

1

Je ne sais pas dans quel ordre vous appelez set_Array et to_Array méthodes. Mais je suppose, le problème est que vous créez essentiellement un tableau 2D de 0 lignes et 0 tailles que public String[][] filetable = new String[rows][cols]; est appelé lorsque rows=0 et cols=0. Pour rectifier, appelez votre méthode set_Array pour affecter les valeurs correctes à rows et cols, puis instanciez votre tableau 2D dans votre méthode to_Array.

public void to_Array(File example) 
{// Now rows and cols will have proper values assigned 
String[][] filetable = new String[rows][cols]; 
    try 
    { 
     FileReader file = new FileReader(example); 
     Scanner sc = new Scanner(file); 

     int r = 0; 
     while(sc.hasNextLine()) 
     { 
      String[] tokens = sc.nextLine().split(","); 
      for(int c = 0; c < cols; c++) 
       {filetable[r][c] = tokens[c];} 

      r++; 
     } 

    } 

      catch (FileNotFoundException e) 
    { 
     System.out.println(e); 
    } 
}