IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Array index out of range: 0


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Points : 21
    Points
    21
    Par défaut Array index out of range: 0
    Bonjour,

    Mon code ci-dessous m'indique l'erreur Array index out of range: 0. Je crois savoir que cette erreur signifie que j'essaie d'accéder à la valeur d'indice 0 mais que le tableau est vide (ou quelque chose qui s'y apparente quoi...).

    Et pourtant, j'y ai passé toute l'après-midi et je ne vois vraiment pasd'où vient le problème.
    Je poste mon code. Si vous voulez bien m'indiquez pourquoi j'ai cette erreur là ??
    Par avance merci pour votre aide. J'aimerai bien avancer dans mon code et là c'est complètement bloquant pour moi.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
     
         protected void validateFileStructure(File file) throws IOException 
        {
                /**********************************************************************/	
                 //création d'un flux de caractères en lecture
                //BufferedReader fichierEnLecture=new BufferedReader(null);
                //FileReader fichierEnLecture=new FileReader(file);
                // fichierEnLecture.readLine();
                /**********************************************************************/
                LineIterator lineIterator = FileUtils.lineIterator(file);
                Set<String> idndocs = new HashSet<String>();
                int i= 0;
                int j=0;//compteur
     
     
     
     
     
                /**********************************************************************/
                try{
                     String ligneLue;
                    //creation du flux
                    LineNumberReader lnr=new LineNumberReader(new FileReader(file));
                     try{
     
                            while((ligneLue=lnr.readLine())!=null)//parcours des lignes
                            {    String tabLigneLue[]=ligneLue.split(";");//split la ligne lue
     
                                /*********************************************************
                                 * Vérification du code caisse existant:
                                 * codeCaisse saisie en 1ère colonne du fichier de saisie 
                                 * si code caisse existe ok sinon on delete la ligne comprenant le code caisse KO
                                 * pour ne pas générer de pdf pour cette ligne
                                 * *******************************************************/
                                String[] tabCodeCaisse=new String []{"16275","18025","15135","13135","18715","14445","14505","43199","13335","17515","12579",
                                        "11425","11315","13485","18315","12135","13825","14265","16705","12128","19019"};
     
                               boolean contain=false;
                               String valeurATrouve=tabLigneLue[0];//correspond au code caisse de la ligne lue
                               for(i=0;i<tabCodeCaisse.length;i++)
                               {      
                                       LOG.info("i= "+ i + " tabCodeCaisse[i]= "+ tabCodeCaisse[i] +" tabLigneLue= "+ tabLigneLue[0]);      
                                    if(tabCodeCaisse[i].equals(valeurATrouve))
                                   {
                                       contain=true;
                                   }
                               }
                                if(contain)
                                    {
                                    i=0;
                                    LOG.info("");
                                    }
                                else 
     
                                    LOG.info("Code Caisse "+ valeurATrouve + " inexistant." + " Verifiez la saisie.");
     
                              }//fin du while
                            LOG.info("Validation structure terminée");
                         }//fin du try
                    finally
                        { 
                            lnr.close();//libération des ressources**/
     
                        }
                }
                finally {
                }
     
         }

  2. #2
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Citation Envoyé par Morji2810 Voir le message


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String tabLigneLue[]=ligneLue.split(";");//split la ligne lue
    A mon avis, :

    String[] tabLigneLue=ligneLue.split(";");//split la ligne lue

    Si je me trompe pas, simple erreur de syntaxe... Et une erreur de syntaxe, en général, c'est une heure de sommeil qui manque!
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Merci pour ta réactivité. J'ai fait la modif mais rien n'y change. (J' espérais que ce ne soit que ça )

    Je ne comprends pas pourquoi. D'autant plus qu'avec les "1 milliard" de test que j'ai fait, en fait à la fin de mon fichier, lorsqu'il lit la dernièer ligne du fichier, min indice i ne reboucle pas sur i=0 (ou du moins ne s'arrète pas). Il continue à i=21 alors que mon tableau n'a bien que 20 valeurs. (tabCodeCaisse.lenght() donne bien 21).

  4. #4
    Membre éprouvé
    Avatar de Cafeinoman
    Homme Profil pro
    Couteau suisse d'une PME
    Inscrit en
    Octobre 2012
    Messages
    628
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Couteau suisse d'une PME

    Informations forums :
    Inscription : Octobre 2012
    Messages : 628
    Points : 1 256
    Points
    1 256
    Par défaut
    Citation Envoyé par Morji2810 Voir le message
    Merci pour ta réactivité. J'ai fait la modif mais rien n'y change. (J' espérais que ce ne soit que ça )
    De rien ! on va essayer de truver... tu peux poster le log complet, avec les erreurs? En général, la réponse est dedans.

    Citation Envoyé par Morji2810 Voir le message
    (tabCodeCaisse.lenght() donne bien 21).
    Perso, la dessus, moi j'en compte 21 dans ta liste...
    «Dieu ne joue pas aux dés.» - Albert Einstein. Et pan! 30 ans de retard dans la théorie quantique!
    «Tout n'est pas politique, mais la politique s'intéresse à tout.» - Nicolas Machiavel. Et surtout à ceux qui ne s'y intéressent pas.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2012
    Messages
    200
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations forums :
    Inscription : Juillet 2012
    Messages : 200
    Points : 342
    Points
    342
    Par défaut
    Bsr! Je crois que l'erreur se situe là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LOG.info("i= "+ i + " tabCodeCaisse[i]= "+ tabCodeCaisse[i] +" tabLigneLue= "+ tabLigneLue[0]);
    au niveau de l'accès au premier élément de tabLigneLue. L'exception indique même :
    Array index out of range: 0

  6. #6
    Membre averti Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Points : 350
    Points
    350
    Par défaut
    Citation Envoyé par Cafeinoman Voir le message
    A mon avis, :

    String[] tabLigneLue=ligneLue.split(";");//split la ligne lue

    Si je me trompe pas, simple erreur de syntaxe... Et une erreur de syntaxe, en général, c'est une heure de sommeil qui manque!
    Les deux syntaxes sont acceptables.
    F*ck it ! Do it !

  7. #7
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par toutgrego Voir le message
    Les deux syntaxes sont acceptables.
    Oui effectivement, ça n'a rien changé.

    Voici ma log

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    09:10:01,469 INFO  ....pdf.AbstractPdfGeneratorBatch ~ >>>>> Debut du traitement de generation de pdf.
    09:10:01,493 INFO  ....pdf.AbstractPdfGeneratorBatch ~ Nombre de fichiers d'entree detectes : 1
    09:10:01,507 INFO  ....pdf.PdfGeneratorCsv ~ Code caisse OK
    09:10:01,507 INFO  ....pdf.PdfGeneratorCsv ~ Code caisse OK
    09:10:01,508 INFO  ....pdf.PdfGeneratorCsv ~ Code Caisse 1111111 inexistant. Verifiez la saisie.
    09:10:01,509 ERROR ...pdf.AbstractPdfGeneratorBatch ~ java.lang.ArrayIndexOutOfBoundsException: Array index out of range: 0

  8. #8
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par esired Voir le message
    Bsr! Je crois que l'erreur se situe là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LOG.info("i= "+ i + " tabCodeCaisse[i]= "+ tabCodeCaisse[i] +" tabLigneLue= "+ tabLigneLue[0]);
    au niveau de l'accès au premier élément de tabLigneLue. L'exception indique même :
    Array index out of range: 0
    Même en mettant cette LOG.info en commentaire, j'ai toujours la même erreur...

  9. #9
    Membre habitué Avatar de JacNar6
    Homme Profil pro
    Développeur Java/Java EE/Android
    Inscrit en
    Mai 2012
    Messages
    163
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Java/Java EE/Android

    Informations forums :
    Inscription : Mai 2012
    Messages : 163
    Points : 134
    Points
    134
    Par défaut
    Essaie avec un System.out.println(tabLigneLue.length) d'afficher la taille du tableau tabLigneLue; il est probable qu'il soit vide. l'erreur peut venir de ce bout de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     String valeurATrouve=tabLigneLue[0];
    Si vous avez de l'Amour, vous ne ferez du mal à personne et personne ne vous fera du mal. W M Branham

  10. #10
    Membre averti Avatar de toutgrego
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2013
    Messages : 217
    Points : 350
    Points
    350
    Par défaut
    Citation Envoyé par esired Voir le message
    Bsr! Je crois que l'erreur se situe là :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    LOG.info("i= "+ i + " tabCodeCaisse[i]= "+ tabCodeCaisse[i] +" tabLigneLue= "+ tabLigneLue[0]);
    au niveau de l'accès au premier élément de tabLigneLue. L'exception indique même :
    Array index out of range: 0
    Je ne crois pas non plus, je pense que tu dois avoir dans ton fichier une ligne avec juste ';'. Pare que j'ai testé des fichiers de mon coté et j'ai une erreur que dans ce cas là x)
    F*ck it ! Do it !

  11. #11
    Membre à l'essai
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2011
    Messages
    8
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 8
    Points : 15
    Points
    15
    Par défaut
    Il faut que tu vérifies la taille de ton tableau avant de prendre le premier élément.

    De plus, c'est dommage de redéclarrer ta varibale tabCodeCaisse dans ta boucle de lecture du fichier.
    Si tu transformes, ton tableau tabCodeCaisse en une liste de String, tu pourras utiliser la méthode contains de List.

    Ton code ressemblera à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
        List<String> tabCodeCaisse=Arrays.asList( new String []{"16275","18025","15135","13135","18715","14445","14505","43199","13335","17515","12579",
                                        "11425","11315","13485","18315","12135","13825","14265","16705","12128","19019"});
     
    while((ligneLue=lnr.readLine())!=null)//parcours des lignes
     {    
              String tabLigneLue[]=ligneLue.split(";");//split la ligne lue
     
            ....         
     
            if (tabLigneLue.length > 0) { 
               String valeurATrouve=tabLigneLue[0];//correspond au code caisse de la ligne lue 
              if (tabCodeCaisse.contains(valeurATrouve)){
                   LOG.info("Valeur trouvée");
              } else 
                   LOG.info("Code Caisse "+ valeurATrouve + " inexistant." + " Verifiez la saisie.");
     
    }//fin du while
    LOG.info("Validation structure terminée");
    ....

  12. #12
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par toutgrego Voir le message
    Je ne crois pas non plus, je pense que tu dois avoir dans ton fichier une ligne avec juste ';'. Pare que j'ai testé des fichiers de mon coté et j'ai une erreur que dans ce cas là x)

    BINGO Oui effectivement c'était mon fichier d'entrée qui posait problème. Le tout fonctionne maintenant. J'ai un autre pb pour terminer mon traitement mais c'est un pb de chemin qu'il faut que je modifie.

    Merci beaucoup!

  13. #13
    Membre à l'essai
    Femme Profil pro
    Développeur Java
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Points : 21
    Points
    21
    Par défaut
    Citation Envoyé par jessey Voir le message
    Il faut que tu vérifies la taille de ton tableau avant de prendre le premier élément.

    De plus, c'est dommage de redéclarrer ta varibale tabCodeCaisse dans ta boucle de lecture du fichier.
    Si tu transformes, ton tableau tabCodeCaisse en une liste de String, tu pourras utiliser la méthode contains de List.

    Ton code ressemblera à cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
     
        List<String> tabCodeCaisse=Arrays.asList( new String []{"16275","18025","15135","13135","18715","14445","14505","43199","13335","17515","12579",
                                        "11425","11315","13485","18315","12135","13825","14265","16705","12128","19019"});
     
    while((ligneLue=lnr.readLine())!=null)//parcours des lignes
     {    
              String tabLigneLue[]=ligneLue.split(";");//split la ligne lue
     
            ....         
     
            if (tabLigneLue.length > 0) { 
               String valeurATrouve=tabLigneLue[0];//correspond au code caisse de la ligne lue 
              if (tabCodeCaisse.contains(valeurATrouve)){
                   LOG.info("Valeur trouvée");
              } else 
                   LOG.info("Code Caisse "+ valeurATrouve + " inexistant." + " Verifiez la saisie.");
     
    }//fin du while
    LOG.info("Validation structure terminée");
    ....
    Très bonne remarque oui. Car je m'étais rendu compte que la boucle continuait de tourner jusqu'à la fin du tableau même si la valeur à chercher avait été trouvé. Je voulai modifier mon conde de telle sorte à ce que la recherche stoppe une fois la valeur trouvée et si valeur non trouvée alors il indique le message en log.


    Je vais modifier mon code.

    Merci encore pour votre aide! Je vais pouvoir avancer avant le week end

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/08/2008, 18h27
  2. probleme de relogin: String index out of range: 0
    Par bbany dans le forum Wildfly/JBoss
    Réponses: 3
    Dernier message: 07/09/2007, 17h04
  3. [Struts]Bean populate & array index out of bound
    Par djoukit dans le forum Struts 1
    Réponses: 7
    Dernier message: 02/11/2006, 11h03
  4. list index out of range
    Par watcha2020 dans le forum Général Python
    Réponses: 2
    Dernier message: 29/06/2006, 09h59
  5. [Débutant]pb de fichier - array index out of bounds exception
    Par TheBlue dans le forum Collection et Stream
    Réponses: 5
    Dernier message: 12/06/2006, 20h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo