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 :

Problème avec ArrayList


Sujet :

Collection et Stream Java

  1. #1
    Invité
    Invité(e)
    Par défaut Problème avec ArrayList
    Bonjour tous le monde,

    Je suis entrain de créer l'application de mon projet de stage, et j'ai besoin de votre aide.

    La premiere étape de mon projet, consiste a lire un fichier texte, et prendre les informations dedans, et les inserer dans une base de données.

    je vous propose cette solution, mais je ne sais pas ou est le problem

    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
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
     
    package Test;
     
    import java.io.BufferedReader;
    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.StringTokenizer;
    import java.util.logging.Level;
    import java.util.logging.Logger;
     
    public class TestConnexion {
        public static void main (String args[]){
            String filePath = ".\\journal.txt";
            String tkn;
            ArrayList<String> prs = new ArrayList();
            BufferedReader buff = null;
                try {
                    st = con.createStatement();
                    rs = st.executeQuery(strsql);
                    buff = new BufferedReader(new FileReader(filePath));
                    try {
                        String line;
                        while ((line = buff.readLine()) != null) {
                            StringTokenizer s = new StringTokenizer(line," ");
                            if (line.startsWith("MATRICULE")){
                            int i=0, j=0, k;
                            while (s.hasMoreTokens()) {
                                k=i+i*j;
                                j++;
                                if (i==0) {i++; s.nextToken();}
                                else if (i==1) { i++; s.nextToken();}
                                else if (i==2){
                                    i++;
                                    prs.add(s.nextToken());
                                    System.out.println(prs.get(k));
                                }
                                else if (i==3) {
                                    i++;
                                    prs.add(s.nextToken());
                                    System.out.println(prs.get(k));
                                }
                                else if (i==4) {
                                    i++;
                                    prs.add(s.nextToken());
                                    System.out.println(prs.get(k));
                                }
                                else if (i==5) {
                                    i++;
                                    tkn = s.nextToken();
                                    if(tkn.length() != 0){
                                    prs.add(tkn);
                                    System.out.println(prs.get(k));
                                    }
                                    else prs.add(" ");
                                }
                                else if (i==6) {
                                    i++;
                                    tkn = s.nextToken();
                                    if(tkn.length() != 0){
                                    prs.add(tkn);
                                    System.out.println(prs.get(k));
                                    }
                                    else prs.add(" ");
                                }
                                else if (i==7) {
                                    i++;
                                    tkn = s.nextToken();
                                    if(tkn.length() != 0){
                                    prs.add(tkn);
                                    System.out.println(prs.get(k));
                                    }
                                    else prs.add(" ");
                                }
                            }
                        }
                    }
                }
                    catch (IOException ex) {
                        Logger.getLogger(TestConnexion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                finally {
                    try {
                        buff.close();
                    }
                    catch (IOException ex) {
                        Logger.getLogger(TestConnexion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
            }
                catch (FileNotFoundException ex) {
                    Logger.getLogger(TestConnexion.class.getName()).log(Level.SEVERE, null, ex);}
                }
          } 
    }
    Si vous avez d'autre suggestions, veuillez les proposer



    Merci d'avance

  2. #2
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Bonjour,

    Il t'affiche une erreur? si oui peux tu la mettre .
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    Citation Envoyé par ChInOvSki Voir le message
    mais je ne sais pas ou est le problem
    ni nous quel est le problème.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Voila l'erreur:

    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 6, Size: 1
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.get(ArrayList.java:322)
    at Test.TestConnexion.main(TestConnexion.java:49)

    J'ai utilisé une autre façon c'est de vider l'arraylist apres chaque lecture de ligne, à la place de conserver les données et d'utiliser les variables j e k

    Et l'erreur cette fois ci est le meme:

    Exception in thread "main" java.lang.IndexOutOfBoundsException: Index: 1, Size: 1
    at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    at java.util.ArrayList.get(ArrayList.java:322)
    at Test.TestConnexion.main(TestConnexion.java:55)

    Java Result: 1

  5. #5
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 705
    Points : 4 783
    Points
    4 783
    Par défaut
    Ben déjà, ça risque pas de compiler car il n'y a pas d'import de bibliothèque JDBC
    ensuite il y a des tas de variables qui ne sont pas déclarées
    (con, ,strsql, st, rs) etc

    la variable contenant l'instruction sql n'est pas renseignée
    donc pas d'instruction sql ...

    voilà voilà

    je ne fais jamais les gros yeux aux gens qui ont besoin d'aide
    mais faudrait faire autre chose que de copier coller du code au hasard pour avoir un coup de main
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  6. #6
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 481
    Points : 48 806
    Points
    48 806
    Par défaut
    tu essaie de lire au delà de la tailel de la liste, ce qui est logique puisque la valeur k que tu utilise n'a rien à voir avec ce qui est stocké dans la liste.

  7. #7
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    ça vient du fait que la variable k est supérieur à la taille de ton ArrayList et je comprend pas la façon dont tu calcules sa valeur.

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Ben déjà, ça risque pas de compiler car il n'y a pas d'import de bibliothèque JDBC
    ensuite il y a des tas de variables qui ne sont pas déclarées
    (con, ,strsql, st, rs) etc

    la variable contenant l'instruction sql n'est pas renseignée
    donc pas d'instruction sql ...

    voilà voilà

    je ne fais jamais les gros yeux aux gens qui ont besoin d'aide
    mais faudrait faire autre chose que de copier coller du code au hasard pour avoir un coup de main
    J'ai pas inseré le code de la connexion avec la base de données, parce qu'il fonctionne correctement, le problem c'est avec l'arraylist, et ce n'est pas totalement du copier coller ^^

  9. #9
    Modérateur
    Avatar de XxArchangexX
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mars 2012
    Messages
    1 159
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2012
    Messages : 1 159
    Points : 2 323
    Points
    2 323
    Par défaut
    Je suis d'accord avec andry.aime ton erreur c'est quand tu fais tes get(k) ton k est à l'index 6 mais ton array fait une taille de 1. Donc c'est ton k qui n'est pas bon.
    L'Etat est bien administré quand l'escalier de l'école est usé et que l'herbe croît sur celui du tribunal.

    Modérateur BI

  10. #10
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 705
    Points : 4 783
    Points
    4 783
    Par défaut
    ce n'est pas totalement du copier coller
    petit cachotier

    sinon, comme ont dit Tchize et andry.aime, c'est un problème d'indice.
    quand tu utilises les variables j e k, tu as l'erreur : IndexOutOfBoundsException: Index: 1, Size: 1
    il ne faut pas oublier que le 1er élément d'un ArrayList est zéro
    il faut donc que l'indice k soit = 0
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  11. #11
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    tu essaie de lire au delà de la tailel de la liste, ce qui est logique puisque la valeur k que tu utilise n'a rien à voir avec ce qui est stocké dans la liste.
    J'ai utilisé une autre façon:

    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
    ArrayList<String> prs = new ArrayList();
                BufferedReader buff = null;
                try {
                    buff = new BufferedReader(new FileReader(filePath));
                    try {
                        String line;
                        while ((line = buff.readLine()) != null) {
                            StringTokenizer s = new StringTokenizer(line," ");
                            if (line.startsWith("MATRICULE")){
                            int i=0;
                            while (s.hasMoreTokens()) {
                                if (i==0) {i++; s.nextToken();}
                                else if (i==1) { i++; s.nextToken();}
                                else if (i==2){
                                    i++;
                                    tkn = s.nextToken();
                                    prs.add(tkn);
                                    System.out.println(prs.get(0));
                                }
                                else if (i==3) {
                                    i++;
                                    tkn = s.nextToken();
                                    prs.add(tkn);
                                    //System.out.println(prs.get(1));
                                }        
                                }
                                prs.clear();
                            }
                        }
                    }
                }
                    catch (IOException ex) {
                        Logger.getLogger(TestConnexion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                finally {
                    try {
                        buff.close();
                    }
                    catch (IOException ex) {
                        Logger.getLogger(TestConnexion.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
    Pour l'instruction "System.out.println(prs.get(0))" il affiche la bonne formation,
    mais pour "System.out.println(prs.get(1))" il affiche l'erreur, sachons que j'ai deja ajouté un element a arraylist "prs.add"

  12. #12
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 705
    Points : 4 783
    Points
    4 783
    Par défaut
    sachons que j'ai deja ajouté un element a arraylist "prs.add"
    non.
    à cet endroit ta liste ne contient qu'un seul élément
    tu dois donc utiliser "prs.get(0)"
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  13. #13
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Si tu veux afficher le dernier élément ajouter:
    System.out.println(prs.get(prs.size()-1)); et tu dois tester avec la méthode !prs.isEmpty() pour tester s'il n'est pas vide.

    et le prs.clear(); va vider la liste.

    A+.

  14. #14
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    non.
    à cet endroit ta liste ne contient qu'un seul élément
    tu dois donc utiliser "prs.get(0)"
    Le Problem Est Resolu, Merci

    Mais Pourquoi l'indice reste toujours 0 meme si j'ai ajouté autre elements au arraylist??

  15. #15
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Citation Envoyé par andry.aime Voir le message
    et le prs.clear(); va vider la liste.

    A+.

  16. #16
    Modérateur

    Homme Profil pro
    Développeur java, access, sql server
    Inscrit en
    Octobre 2005
    Messages
    2 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur java, access, sql server
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 705
    Points : 4 783
    Points
    4 783
    Par défaut
    Citation Envoyé par ChInOvSki Voir le message
    Le Problem Est Resolu, Merci

    Mais Pourquoi l'indice reste toujours 0 meme si j'ai ajouté autre elements au arraylist??
    Tu n'utilises l'instruction "prs.add(tkn)"
    que dans deux cas qui s'excluent avec des if
    ensuite tu remets ton tableau à zéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                                else if (i==2){
                                    i++;
                                    tkn = s.nextToken();
                                    prs.add(tkn);
                                    System.out.println(prs.get(0));
                                }
                                else if (i==3) {
                                    i++;
                                    tkn = s.nextToken();
                                    prs.add(tkn);
                                    //System.out.println(prs.get(1));
                                }        
                                }
                                prs.clear();
    donc aucune chance d'avoir 2 lignes dans ton tableau
    Labor improbus omnia vincit un travail acharné vient à bout de tout - Ambroise Paré (1510-1590)

    Consulter sans modération la FAQ ainsi que les bons ouvrages : http://jmdoudoux.developpez.com/cours/developpons/java/

  17. #17
    Invité
    Invité(e)
    Par défaut
    Oui Andry.aime, j'ai ajouté la methode clear() pour vider l'arraylist a chaque fois que les instructions se repetent ^^

  18. #18
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Népomucène Voir le message
    Tu n'utilises l'instruction "prs.add(tkn)"
    que dans deux cas qui s'excluent avec des if
    ensuite tu remets ton tableau à zéro :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                                else if (i==2){
                                    i++;
                                    tkn = s.nextToken();
                                    prs.add(tkn);
                                    System.out.println(prs.get(0));
                                }
                                else if (i==3) {
                                    i++;
                                    tkn = s.nextToken();
                                    prs.add(tkn);
                                    //System.out.println(prs.get(1));
                                }        
                                }
                                prs.clear();
    donc aucune chance d'avoir 2 lignes dans ton tableau

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

Discussions similaires

  1. Problème avec ArrayList
    Par yarf dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 03/07/2007, 11h50
  2. problème avec ArrayList et JVM
    Par ulysse031 dans le forum Collection et Stream
    Réponses: 29
    Dernier message: 26/04/2007, 21h47
  3. problème avec arraylist
    Par ulysse031 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 27/02/2007, 13h00
  4. [débutant] problème avec arraylist
    Par sissi25 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/12/2006, 17h01
  5. Problème avec ArrayList <String>
    Par fiphi dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 29/08/2006, 10h30

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