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

avec Java Discussion :

Problème pour parcourir une liste de String


Sujet :

avec Java

  1. #1
    Invité
    Invité(e)
    Par défaut Problème pour parcourir une liste de String
    Bonjour, je dois parcourir une liste de String seulement je sais pas quel méthode je dois utilisé pour passé à l'autre block.
    Car le but de ma méthode est de parcourir une liste constitué de block où chaque block à 2 éléments (le premier [0] l'album, l'artiste ect | le second [1] le nom de l'album, artiste, à récupérer)

    Merci d'avance.

    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
    	private void createMediaList(List<List<String[]>> data) {	
    		Media aMedia = new Media();
     
    		   for(List<String[]> block : data){
    				for(String[] e : block){
     
    					aMedia.setAlbum(e[1]);
    					aMedia.setArtist(e[1]);
    					aMedia.setLocation(e[1]);
    					aMedia.setName(e[1]);
    					aMedia.setRating(sToInt(e[1]));// Les 3 dernières lignes sont des int donc on opère une conversion.
    					aMedia.setTrack_ID(sToInt(e[1]));
    					aMedia.setYear(sToInt(e[1]));
     
    				}
    				block.next(); //--> Mon Problème  
    				this.basicAdd(aMedia);
    			}
     
    		//Méthode de conversion
    		static int sToInt(String s){ 
    			int Int  = Integer.parseInt(s);
    			return Int;
    		}

  2. #2
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    bonjour,

    Tu ne pas besoin de "block.next()" puisque tu es dans une boucle for, ca passe automatiquement au block suivant !

    Je n'ai pas bien compris le problème exacte, mais je pense qu'il faut que tu revois la structure de tes données. Je pense que ton vrai problème est là.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    je confirme tu n'a pas besoin du block.next(); c'est ton for qui vas le modifier

    par contre je ne sais pas si c'est une erreur quand tu a mis ton code
    mais je doute que

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    					aMedia.setAlbum(e[1]);
    					aMedia.setArtist(e[1]);
    					aMedia.setLocation(e[1]);
    					aMedia.setName(e[1]);
    					aMedia.setRating(sToInt(e[1]));// Les 3 dernières lignes sont des int donc on opère une conversion.
    					aMedia.setTrack_ID(sToInt(e[1]));
    					aMedia.setYear(sToInt(e[1]));
    soit très juste car pour les 4 1er ok c'est des string tout marche bien e[1]

    mais bon mon artiste est toto je doute que cela marche bien avec la fonction sToInt() de plus tu utilise toujours e[1] ou est l'utiliser du tableau dans ce cas ?

  4. #4
    Invité
    Invité(e)
    Par défaut
    Voilà ce que je dois faire comme méthode
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private void createMediaList(List<List<String[]>> data)
    data est une structures de donnees contenant des informations sur les medias.
    * Il s'agit en fait d'une "liste de liste de tableaux de String".
    * +-+-+ +-+-+ +-+-+
    * data = |.|.+--- ... --->|.|.+--->|.|.|
    * +++-+ +++-+ +++-+
    * | | |
    * V V V
    * _____________________________ _____________________________
    * | Block 1 | | Block N |
    * |_____________________________| |_____________________________|
    *
    * Le parametre data est une liste contenant d'autres listes.
    * Appellons ces dernieres listes des 'blocks'.
    * Un block contient des informations sur un media.
    *
    * +-+-+ +-+-+ +-+-+
    * block i = |.|.+------------->|.|.+----------->|.|.+-----> ...
    * +++-+ +++-+ +++-+
    * | |
    * V V
    * +--------+-----+ +----+-----------+ +------+--------+
    * |Track_ID|10672+ |Name|Horror Land+ |Artist|Al Azred|
    * +--------+-----+ +----+-----------+ +------+--------+
    *
    * Un block est une liste qui contient des tableaux de String. Appellons ces tableaux des elements.
    * Chaque element est un tableau a deux entrees.
    * La premiere entree element[0] est le nom d'un champ, comme "Track_ID", "Name", "Artist", "Album", "Year", "Rating" ou "Location".
    * La deuxieme entree element[1] est la valeur de ce champ pour le media encode dans le block.



    Donc effectivement j'ai pas besoin du next, d'ailleurs depuis eclipse ne trouve plus d'erreur apparente. Sauf qu'a la compilation ça foire !
    Je crois avoir compris pourquoi ça foirais mais j'arrive pas à résoudre.

    Je pense que ça ne compile pas car j'utilise toujours le meme element et la meme entrée en tappant e[1].
    Bref il faudrais une sorte d'indice que la première valeur soie track_ID etc

    en résumé:
    Track_ID à un indice 0
    Name -> 1
    Artist -> 2
    etc et rajouté qu'ils doivent prendre la deuxième entrée.

    @rolfone: je suis sur pour la conversion en int car Rating, Track_ID et Year sont des champs int dans ma class media.

    Je sais que c'est pas l'implémentation la plus logique pour des dévloppeur expérimenté mais bon je suis obligé de suivre les consignes.

    Merci de votre aide

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 5
    Points : 6
    Points
    6
    Par défaut
    Ce que te dis rolfone c'est que tu passes le même paramètre à chaque ligne dans ta boucle for.

    Ce qui se trouve dans e[1] n'est pas modifié au cours de ta boucle. En imaginant que la première fois e[1] ait pour valeur "toto", les valeurs Album, Artist, Location, Name, etc... vont prendre pour valeur "toto". D'où le fait que la conversion en int ne soit pas justifiée.

    Comme tu le dis, il te faut dans ce cas un indice (au hasard un int i) que tu incrémenterai à chaque fois que tu en a besoin.

    la méthode qui correspondrait à la façon dont tu veux traiter ton problème serait de coder "bêtement" les valeurs en dur, comme suis :

    aMedia.setAlbum(e[0]);
    aMedia.setArtist(e[1]);
    aMedia.setLocation(e[2]);
    aMedia.setName(e[3]);
    aMedia.setRating(sToInt(e[4]));
    aMedia.setTrack_ID(sToInt(e[5]));
    aMedia.setYear(sToInt(e[6]));

    en admettant que ton objet e contienne l'album à la position 0, l'artiste à la position 1, etc...

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    le problème n'est pas la conversion en int je me suis mal expliqué

    le problème est le suivant

    tu récupère e un tableau qui a mon avis suivent ton sujet qui est de la forme

    ---------------
    | Track_ID | indice 0
    ---------------
    | Track valeur | indice 1
    ---------------

    donc si tu ajoute e[1] dans tout les champs tu vas avoir un problème non ?

    pour moi tu doit plutôt être dans le cas

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for(List<String[]> block : data){
    	aMedia.setAlbum(block.get(0)[1]);
    	aMedia.setArtist(block.get(1)[1]);
    	aMedia.setLocation(block.get(2)[1]);
    	aMedia.setName(block.get(3)[1]);
    	aMedia.setRating(sToInt(block.get(4)[1]));
    	aMedia.setTrack_ID(sToInt(block.get(5)[1]));
    	aMedia.setYear(sToInt(block.get(6)[1]));
    	this.basicAdd(aMedia);
    }
    je trompe peut etre mais de ce que j'ai compris c'est un block qui corresponde à un aMedia

    ton erreur de compilation peut peut etre nous aidé car le probleme si dessus serré une erreur de run

  7. #7
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    j'ai compris la meme chose que toi rolfone !

    ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    for(List<String[]> block : data){
    	aMedia.setAlbum(block.get(0)[1]);
    	aMedia.setArtist(block.get(1)[1]);
    	aMedia.setLocation(block.get(2)[1]);
    	aMedia.setName(block.get(3)[1]);
    	aMedia.setRating(sToInt(block.get(4)[1]));
    	aMedia.setTrack_ID(sToInt(block.get(5)[1]));
    	aMedia.setYear(sToInt(block.get(6)[1]));
    	this.basicAdd(aMedia);
    }
    Mais ce code ne fonctionnera que dans le cas ou les champs arrivent dans le même ordre par exemple si "Rating" arrive avant "Name" ca ne marche plus.
    Pour plus de sureté, il faut peut être controler par exemple que le titre du block de l'indexe 4 est bien "Rating" et pas un autre.
    Dans ce cas dans ta boucle tu dois vérifier chaque titre avant de faire le bon Set.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    oui je suis partie du principe que les block avais toujours la même forme

    ps tu peut même voir si tu ne peut pas passé List<Sting[]> en une Map<String,String> ce n'est pas obligé (ou peut être tout simplement pas possible) mais après çà pourrais simplifier les choses

  9. #9
    Invité
    Invité(e)
    Par défaut
    Grand Merci,
    J'ai plus de problème de compilation grace à ta méthode, Alkhan !
    En plus j'ai compris mon erreur ... ;-)

    Néanmoins mon code ne fais ce que je veux: quand je le compile il indique la même chanson (artiste, album, track_ID ect) près de 40 fois.
    Donc il manque encore une incrémentation ...

    copie de mon code actuel qui compile mais qui indique tout le temps la meme chanson:

    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
    private void createMediaList(List<List<String[]>> data) {	
    			Media aMedia = new Media();			
    				for(List<String[]> block : data){
    					aMedia.setTrack_ID(sToInt(block.get(0)[1]));
    					aMedia.setName(block.get(1)[1]);
    					aMedia.setArtist(block.get(2)[1]);
    					aMedia.setAlbum(block.get(3)[1]);
    					aMedia.setYear(sToInt(block.get(4)[1]));
    					aMedia.setRating(sToInt(block.get(5)[1]));
    					aMedia.setLocation(block.get(6)[1]);
    					this.basicAdd(aMedia);
    				}	
    		}		   		
     
    		//Méthode de conversion.
    		//PRE:- s est un String contenant des caracteres representant un nombre entier
    		//POST:- L' entier represente par le String s est renvoye
    		static int sToInt(String s){ 
    			int Int  = Integer.parseInt(s);
    			return Int;
    		}

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    342
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 342
    Points : 419
    Points
    419
    Par défaut
    merci pour Alkhan (c'est moi qui te trouve l'erreur et qui la corrige mais c'est pas grave)

    je ne sais pas si je te corrige l'autre

    bon allé si

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    private void createMediaList(List<List<String[]>> data) {	
    			Media aMedia = null;			
    				for(List<String[]> block : data){
                                            aMedia = new Media();	
    					aMedia.setTrack_ID(sToInt(block.get(0)[1]));
    					aMedia.setName(block.get(1)[1]);
    					aMedia.setArtist(block.get(2)[1]);
    					aMedia.setAlbum(block.get(3)[1]);
    					aMedia.setYear(sToInt(block.get(4)[1]));
    					aMedia.setRating(sToInt(block.get(5)[1]));
    					aMedia.setLocation(block.get(6)[1]);
    					this.basicAdd(aMedia);
    				}	
    		}
    et normalement ça doit marché

  11. #11
    Invité
    Invité(e)
    Par défaut
    Nickel ça marche comme sur des roulette!

    Peux tu m'expliqué juste pour quoi tu as mit à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Media aMedia = new Media();
    dans la boucle

    Il y a une raison particulière où c'est juste par préférence.
    Enfin la je me sens bête que mon dernier obstacle soit aussi simple

    Désolée pour le nom, d'ailleurs au départ je t'avais remercier puis quand j'ai regardé le dernier message envoyé j'ai changé.
    La je t'offre l'exclusivité de mer remerciements

  12. #12
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    si tu laisse ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Media aMedia = new Media();
    à l'extérieure de la boucle for, tu crées une instance de aMedia qui ne sert a rien.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Modérateur
    Avatar de Alkhan
    Homme Profil pro
    ingénieur full stack
    Inscrit en
    Octobre 2006
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur full stack

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 232
    Points : 2 061
    Points
    2 061
    Par défaut
    mais le plus important est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    aMedia = new Media();
    à l'intérieur de la boucle afin de créer une instance à chaque bloc.
    Il n'y a pas de problème, il n'y a que des solutions.
    Cependant, comme le disaient les shadoks, s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.
    Si toutefois le problème persiste, la seule solution restante est de changer le périphérique qui se trouve entre la chaise et l'écran

    Mes Articles : Mon premier article est sur le language D
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  14. #14
    Invité
    Invité(e)
    Par défaut
    Ok je m'en doutais, mais c'était pas claire.
    Merci pour tout et surtout la réactivité de tes réponses.

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

Discussions similaires

  1. Probléme pour charger une List dans un s:select
    Par Elthriel dans le forum Struts 2
    Réponses: 10
    Dernier message: 17/07/2008, 11h21
  2. problème pour alimenter une liste
    Par mawelle dans le forum IHM
    Réponses: 2
    Dernier message: 31/03/2008, 11h30
  3. problème pour appeler une liste de catégorie
    Par minie dans le forum Struts 1
    Réponses: 11
    Dernier message: 29/05/2007, 16h39
  4. Problème pour afficher une liste déroulante
    Par Oli_Ifre dans le forum Langage
    Réponses: 2
    Dernier message: 18/04/2007, 09h11
  5. Problème pour positionner une liste déroulante
    Par ouckileou dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 30/09/2004, 01h05

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