ArrayList

juba -  
KX Messages postés 19031 Statut Modérateur -
Bonjour, j'ai une liste avec des tableaux de String dedans et veux extraire les valeurs de le nieme élément des tableaux mais ça fonctionne pas. voici mon code:

public void tableau(ArrayList<String[]> list ){
           int i=0;
          for(String[]s: list ){
              X[i]= Integer.parseInt(s[2]);
              i++;
          } 
    }


J'ai besoin d'extraire ces valeurs pour dessiner un graphe pour mon PFD. Merci d'avance.

4 réponses

KX Messages postés 19031 Statut Modérateur 3 020
 
On ne sait pas ce qu'est X, mais il faudrait que ce soit un int[] avec X.length>=list.size()
À part ça, il n'y a pas de raison que ton code ne fonctionne pas, sauf si les String[] que tu itères n'ont pas au moins 3 valeurs...
0
juba
 
Cette liste contient les lignes d'un fichier que j'ai extrais sous forme d'un tableau de mots, le X ç bien un tableau d'entiers qui sert de coordonnées pour le graphe.
à la compil il n'affiche pas d'erreur mais à l'exécution l'application se bug...
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Il va donc falloir nous dire où ça plante, mais j'ai rappelé les conditions pour que ça marche, il y en a donc au moins une des deux qui n'est pas correcte (taille de X, ou des s)
0
juba
 
Voilà, je vais vous faire un topo, je fais une application qui dessine des graphes à partir des données contenues dans un fichier csv donc je fait l'extraction de ces données vers une liste voici le code:
 do{
            //**** Si le fichier est ouvert alors la méthode lire() lit le fichier ligne par ligne
            chaine= fic.lire(); // String chaine 
            //******************************************************************
            //*** Extraction des données dans un tableau  depuis les lignes lues par cette méthode
            mots =(extracDonnees.extractionDonnees(chaine));// String [] mots
            //******************************************************************
            //**** Mettre le tableau dans une liste de tableau *****************
            valeur.add(mots);// ArrayList<String[]> valeur
            //******************************************************************
            }while(mots != null);

A partir de cette liste que je veux récupérer les éléments de la 2eme et 3eme colonne qui constitue les abscisses et les ordonnées du graphe. j'ai essayé cette méthode pour une colonne:
public void tableau(ArrayList<String[]> list ){
           int i=0;
           int [] K = new int[list.size()];
          for(String[]s: list ){
              K[i]= Integer.parseInt(s[2]);
              i++;
              System.out.println(k);// pour voir ce que me donne
          }
    }

le code s'exécute normalement mais il revoit aucune valeur????? Comme si la liste est vide!!!!! j'ai vraiment besoin de passer cette étape pour terminer mon PFD
0
KX Messages postés 19031 Statut Modérateur 3 020
 
Déjà, je pense que while(mots != null); implique qu'au dernier tour de boucle le valeur.add(mots); va rajouter null à la liste, ce qui posera problème plus tard en faisant s[2] si s==null, tu peux par exemple faire :

while (true)
{
    chaine = fic.lire();
    mots = extracDonnees.extractionDonnees(chaine);

    if (mots==null)
        break;
    else
        valeur.add(mots);
}

Ensuite, je ne sais pas ce que fais exactement extractionDonnees, mais je ne vois pas a-priori en quoi on aurait nécessairement s[2], dans le cas général on pourrait avoir s.length<3, mais cela va dépendre surement de ta structure de fichier CSV, ce serait quand même bien de s'en assurer.

Pour revenir vraiment au plus près de ce que tu suspectes : que la liste soit vide, il faudrait regarder dans un premier temps combien vaut list.size()... et si effectivement cela vaut 0, regarder si ce que tu manipules c'est bien une java.util.ArrayList<E>, j'ai déjà eu des erreurs parce que j'avais oublié de faire l'import d'ArrayList mais qu'il connaissait malgré tout le nom par effet de bord avec une autre classe.
Au passage, tu pourrais regarder le résultat de valeur.add, qui doit renvoyer true si la liste a changé.
0