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 appel ArrayList


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut Problème appel ArrayList
    bonjour à tous , j'ai une classe sans laquelle je retourne un arraylist, j'ai fait un getter qui est sensé me retourne l'arraylist en question, je souhaite utiliser ce getter dans un autre classe et ca marche pas(le getter est sensé me retourné la taille de l'arraylist), ca me donne 0
    voici le code de ma classe :

    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
    package dossier;
    //importation des classes nécessaires pour l'éxécution de mon programme
    import java.io.*;
    import javax.swing.*;
    import java.util.*;
     
     
    public class LectureFichier{
    /**
     * @param écrit un fichier en dur sur le disque
     */
          ArrayList al = new ArrayList();
        String intOctetLu;
    int size;
     
        //char charac[] = new char[nbre];
     public ArrayList testFichier(){
    /*lecture du fichier texte
     public int getTailleArrayList(){
    //les blocs try et catch permettent la gestion des erreurs
    //car lors de la manipulation des fichiers il peut survenir plusieurs problèmes
    //qui pourraient bloquer l'utilisateur, grâce à cela on peut redonner la main à l'utilisateur.*/
    File fichier;
             //permet de créer l'objet qui affiche un message dans un boite de dialogue
             javax.swing.JOptionPane.showMessageDialog(null,"Merci de choisir le fichier \"bonjour.txt\" sur votre disque");
     
             //File est une classe contenu dans java, pour l'appeler il faut importer java.io.*;
             //comme fait plus haut. File permet d'interagir avec des fichiers.
             //JFileChooser va permettre d'ouvrir une boite de dialog pour chercher un fichier
                    JFileChooser fc = new JFileChooser();
                    int retour=fc.showOpenDialog(null);
             //la structure de controle if permet de dire que si la méthode
             //APPROVE_OPTION de la classe JFileChooser est vérifiée (si l'utilisateur
             //clique sur "ok" dans la boite de dialogue) alors ,l'utilisateur peut rechercher
             //le fichier dans l'arborescence du Systeme de Fichier
             try{
                    if(retour==JFileChooser.APPROVE_OPTION){
                      fichier=fc.getSelectedFile();
                        // chemin absolu du fichier choisi
                      // fc.getSelectedFile().getAbsolutePath()
                       FileInputStream fi = new FileInputStream(fichier);
                       InputStreamReader str = new InputStreamReader(fi);
                       BufferedReader br = new BufferedReader(str);
                       int i =0;
                     while((intOctetLu = br.readLine())!= null){
                       al.add(intOctetLu);
                       i++;
                     }
                //ferme le BufferReader
    		br.close();
                    }
     
            }
            //retourne s'il y a un probleme dans le bloc try l'exception
            catch(Exception e){
                System.out.println("Probleme lors de la lecture");
            }
        return al;
        }
     
        public ArrayList get_ArrayList (){
            return al;
        }
     
         public void set_ArrayList(ArrayList valeur){
                al=valeur;
        }
         public int getTailleArrayList(){
             return al.size();
         }
    }




    Donc comme je le disais impossible de recuperer la taille de mon arraylist dans une autre classe qui est :

    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
    package dossier;
    import java.util.ArrayList;
     
    /**
     *
     * @author alex
     */
    public class Tableaux {
     
        LectureFichier lf = new LectureFichier();
     
        //private String test = new String ();
        int taille = lf.getTailleArrayList();
     
    public void acquisition(){
    System.out.println(taille);
          /*int taille = lf.testFichier().size();
        for(int cpt=0; cpt<taille; cpt++){
            
            if((cpt%2)==0){
                String array = String.valueOf(lf.testFichier().get(cpt));
            }    else{
                    String array2 = String.valueOf(lf.testFichier().get(cpt));
            }
        }
        System.out.println(array);*/
    }
    }

    merci à tous pour votre aide...

  2. #2
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Salut, pense à mettre ton code entre balises (Signe #) !
    Car là, il faut être motivé pour le lire

    Sinon, la réponse est simple (sauf si je me trompe). Tu utilises le getter avant que le fichier soit lu et enregistré dans ton ArrayList.
    Du coup ta liste est vide => List.size() == 0

    Par contre j'aurais des commentaires sur ton code.
    Je vais commencer par la première classe :

    1. ArrayList al = new ArrayList(); :
    Ta liste ne contiendra que des String, du coup préfère :
    ArrayList<String> al = new ArraList<String>();
    Cette modification est à apporter aussi sur les setter et les getter.

    2. String intOctetLu; :
    Bon déjà le nom de la variable ne correspond pas à ce qu'elle est réellement, mais je suppose que tu as du faire d'autres essais avant et que tu ne l'as pas changé par la suite. Par contre, la position ne me semble pas intéressante. Tu en fais un attribut de ton objet alors que cette variable ne sert que dans le cadre d'une des méthodes. Du coup, je pense que tu devrais la placer dans la méthode directement.

    3. int size; :
    Tu ne l'utilises pas => et en effet, le ArrayList.getSize() devrait suffir je pense.

    4. int i = 0; puis i++
    Ces 2 lignes ne servent à rien.
    Tu es bien dans une boucle, mais c'est un while(boolean).
    La boucle continura tant que la valeur qui est dedans == true.
    Dans ton code, le br.readLine() retournera null lorsque la fin du fichier sera atteinte. Donc tu obtiendras while(null!=null) => false => sortie de boucle

    5. public ArrayList testFichier(){
    Ta méthode qui lit le fichier retourne directement le contenu sous forme d'ArrayList. Du coup, à quoi te servent les autres parties de ta class ?
    Dans ce cas là, autant en faire une méthode static (Sauf si tu comptes faire autre chose avec cette class ?)

    Suite à mes remarques, voici le code qui en résulte :
    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
    import java.io.*;
    import javax.swing.*;
    import java.util.*;
     
     
    public class LectureFichier{
    	public ArrayList<String> testFichier(){
    		ArrayList<String> al = new ArrayList<String>();
     
    		javax.swing.JOptionPane.showMessageDialog(null,"Merci de choisir le fichier \"bonjour.txt\" sur votre disque");
     
    		JFileChooser fc = new JFileChooser();
    		int retour=fc.showOpenDialog(null);
    		try{
    			if(retour==JFileChooser.APPROVE_OPTION){
    				File fichier=fc.getSelectedFile();
    				BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fichier)));
    				String ligne;
    				while((ligne = br.readLine())!= null){
    					al.add(ligne);
    				}
    			br.close();
    			}			
    		}
    		catch(Exception e){
    			System.out.println("Probleme lors de la lecture");
    		}
    		return al;
    	}	
    }
    Et voici comment l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		ArrayList<String> fichier = LectureFichier.testFichier();
     
    		int taille = fichier.size();
    		String une_ligne = fichier.get(num_ligne);

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Bah, la taille de la liste est zéro, donc la méthode renvoie zéro, forcément...
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut
    merci beaucoup pour vos reponses elles m'aident beaucoup, desolé pour le code indigeste, je vais mettre les balises si j'y arrive ,
    du coup j' ai deux autres questions :

    le <String> pour l'arraylist, en fait ca force le type que l'on souhaite dans l'arraylist, si j'ai bien compris...

    je vous montre mes deux codes mieux tapés :

    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
     
     
    package dossier;
    //importation des classes nécessaires pour l'éxécution de mon programme
    import java.io.*;
    import javax.swing.*;
    import java.util.*;
     
     
    public class LectureFichier{
    	public static ArrayList<String> testFichier(){
    		ArrayList<String> al = new ArrayList<String>();
     
    		javax.swing.JOptionPane.showMessageDialog(null,"Merci de choisir le fichier \"bonjour.txt\" sur votre disque");
     
    		JFileChooser fc = new JFileChooser();
    		int retour=fc.showOpenDialog(null);
    		try{
    			if(retour==JFileChooser.APPROVE_OPTION){
    				File fichier=fc.getSelectedFile();
    				BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fichier)));
    				String ligne;
    				while((ligne = br.readLine())!= null){
    					al.add(ligne);
    				}
    			br.close();
    			}
    		}
    		catch(Exception e){
    			System.out.println("Probleme lors de la lecture");
    		}
    		return al;
    	}
    }
    et l'autre dans lequel je teste que la taille de l'arraylist soit exact(et ca marche):

    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
     
     
    package dossier;
    import java.util.ArrayList;
     
    /**
     *
     * @author alex
     */
    public class Tableaux {
     
     
     
        //private String test = new String ();
                 ArrayList<String> fichier = LectureFichier.testFichier();
     
    		int taille = fichier.size();
     
     
    public void acquisition(){
    System.out.println(taille);
    }
    }
    donc ma derniere question est pourquoi dans ma premiere classe je ne peux faire une methode qui me retourne un arraylist avec la taille de celui ci et pas 0, j'aimerais justemment faire une méthode comme cela est-ce possible?

    merci beaucoup

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Oui tu peux, mais si tu n'as besoin que de méthode que ArrayList possède déjà est-il vraiment nécessaire de faire une class pour ca ?

    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
    import java.io.*;
    import javax.swing.*;
    import java.util.*;
     
     
    public class LectureFichier{
     
    	private ArrayList<String> al = new ArrayList<String>();
     
    	public void loadFile(){
     
    		javax.swing.JOptionPane.showMessageDialog(null,"Merci de choisir le fichier \"bonjour.txt\" sur votre disque");
     
    		JFileChooser fc = new JFileChooser();
    		int retour=fc.showOpenDialog(null);
    		try{
    			if(retour==JFileChooser.APPROVE_OPTION){
    				File fichier=fc.getSelectedFile();
    				BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(fichier)));
    				String ligne;
    				while((ligne = br.readLine())!= null){
    					al.add(ligne);
    				}
    			br.close();
    			}			
    		}
    		catch(Exception e){
    			System.out.println("Probleme lors de la lecture");
    		}
    	}
     
    	public ArrayList<String> getFile(){
    		return al;
    	}
     
    	public String getLigne(int index){
    		return al.get(index);
    	}
     
    	public int size(){
    		return al.size();
    	}
    }

  6. #6
    Membre averti
    Inscrit en
    Mai 2010
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 26
    Par défaut petit souci
    deja merci pour toutes vos reponses, elles m'aident vraiment beaucoup...

    en revanche pour la derniere la methode size() qui est censée me retournée la taille de mon arraylist, ne marche pas; je m'explique : lorsque je l'appelle elle retourne 0 pour la taille de mon arraylist, je suppose que c'est pas normal et je comprends pas pourquoi elle ne récupere pas la valeure de al qui est en retour dans ma premiere méthode..

    merci beaucoup.

  7. #7
    Membre chevronné
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    299
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2009
    Messages : 299
    Par défaut
    Je pense que tu fais encore la même erreur.

    Lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LectureFichier lecteur = new LectureFichier();
    Ca construit un objet LectureFichier qui contient comme attribut un ArrayList vide => size()==0.

    Dans ce cas, il faut lire le fichier pour que le ArrayList soit rempli :
    Une fois le fichier chargé tu auras enfin une taille != de 0.

    Si tu veux que ton objet contienne le fichier dès son initialisation, il faut que tu places le contenu de la méthode loadFile() directement dans le constructeur.

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

Discussions similaires

  1. problème avec arraylist
    Par ulysse031 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 27/02/2007, 12h00
  2. [débutant] problème avec arraylist
    Par sissi25 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 17/12/2006, 16h01
  3. Réponses: 10
    Dernier message: 08/12/2006, 02h18
  4. Problème avec ArrayList <String>
    Par fiphi dans le forum Collection et Stream
    Réponses: 8
    Dernier message: 29/08/2006, 09h30
  5. [Système] Problème appel exécutable
    Par Aurel 76 dans le forum Langage
    Réponses: 5
    Dernier message: 29/04/2006, 14h49

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