Bonjour,
Je cherche comment combiner deux boucles for dans une seule.
Mes deux boucles sont :
Merci d'avance pour votre aide.Code:
1
2 for (Element userElement : userElements ) && for (Element textElement : textElements) { }
Version imprimable
Bonjour,
Je cherche comment combiner deux boucles for dans une seule.
Mes deux boucles sont :
Merci d'avance pour votre aide.Code:
1
2 for (Element userElement : userElements ) && for (Element textElement : textElements) { }
L'une dans l'autre.
Code:
1
2
3
4
5 for (Element userElement : userElements ) { for (Element textElement : textElements) { } }
- Ou bien tu veux des boucles imbriquées, et cf ci-dessus.
- Ou bien tu as deux listes de même taille, et tu veux les parcourir ensemble ; auquel cas, je ne connais pas de méthode très jolie. Il y a la méthode "je fais une boucle avec un entier i, et je parcoure sur la taille", et la méthode "je déclare deux itérateurs, et je fais next en même temps". La méthode sur les itérateurs est probablement la plus propre.
Code:
1
2
3
4
5
6
7
8 Iterator<Element> itElement = userElements.iterator(); Iterator<Element> itTextElement = textElements.iterator(); while (itElement.hasNext() && itTextElement.hasNext()) { Element userElement = itElement.next(); Element textElement = itTextElement.next(); ... }
merci Rei Ichido;
j'ai intégré votre solution, mais le code final n'affiche rien ni résultat ni erreur.
ici le code :
merciCode:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 List<Element> userElements = source.getAllElements(HTMLElementName.A); List<Element> textElements = source.getAllElements(HTMLElementName.DIV); Iterator<Element> itElement = userElements.iterator(); Iterator<Element> itTextElement = textElements.iterator(); while (itElement.hasNext() && itTextElement.hasNext()) { Element userElement = itElement.next(); Element textElement = itTextElement.next(); String profiArea = userElement.getAttributeValue("title"); //title="voir le profil complet" String textArea = textElement.getAttributeValue("class"); if (("affTextArea".equals(textArea)) && ("voir le profil complet".equals(profiArea))) { System.out.println("\n"); String text = textElement.getContent().getTextExtractor().toString(); String user = userElement.getContent().getTextExtractor().toString(); System.out.println(user + "\n" + text); } }
A priori, la condition du if n'est jamais respectée.
Pour debugger, vous pouvez déjà afficher les valeurs des deux String profiArea et textArea avant le if, et diagnostiquer pourquoi vous n'y rentrez pas ?
vous avez raisons, le prb c'est dans le if,
mais vous avez une solution comment faire une double condition
C'est à dire, une double condition ?
Je ne sais pas, déjà est-ce que les "doubles conditions" sont possibles ?
En fait, j'aimerais savoir s'il y a une solution ou si je dois tout refaire ?
Merci
Il faudrait surtout définir ce qui doit être fait, parce que "Double condition", c'est flou.
Actuellement, il y a un, ce qui veut dire qu'on rentre dans le if si les deux conditions sont simultanément respectées.Code:&&
Ca pourrait être unqui voudrait dire qu'il suffit que l'une des deux soit respectée pour qu'on rentre dans le if.Code:||
Il pourrait aussi y avoir 2 ifs séparés avec des choses distinctes dedans ...
EDIT : sinon une cause du problème pourrait être qu'il y a des espaces à la fin des chaînes testées, si elles ont l'air d'être correctes et que vous pensez que la condition du if est respectée. Tester un petit trim ne saurait faire de mal !
oui, tu peux mettre autant de condition que tu veux dans ton if, si c'est ça ta question.
Ca a donné quoi le debug?
je vous explique tous;
en fait, j'analyse syntaxiquement un forum, et dans les forums comme vous savez il y a des membres et des message, le code que j'ai fais au début et celui là. il analyse chaque balise séparément :je veux combiné entre les deux résultat pour finalement faire :Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24 List<Element> userElements = source.getAllElements(HTMLElementName.A); for (Element userElement : userElements ) { String profiArea = userElement.getAttributeValue("title"); //title="voir le profil complet" if ("voir le profil complet".equals(profiArea)) { System.out.println("\n"); String user = userElement.getContent().getTextExtractor().toString(); System.out.println( user); } else continue; } List<Element> textElements = source.getAllElements(HTMLElementName.DIV); for (Element textElement : textElements) { String textArea = textElement.getAttributeValue("class"); if ("affTextArea".equals(textArea)) { System.out.println("\n"); String text = textElement.getContent().getTextExtractor().toString(); System.out.println(text); } else continue; }
Code:System.out.println(user + text);
Si tu fais:
avant ta double condition, tu comprendras peut être pourquoi tu ne rentres pas dans ton if.Code:System.out.println(textArea+" "+profiArea);
Idélament il faudrait aussi ne pas déclarer tes String dans le while mais avant.
Euh... Tu vas devoir trouver comment rattacher les messages aux utilisateurs qui les ont postés !
Ce n'est pas une question de combiner des boucles.
Oui thelvin, c'est exactement ce que je veux faire.
nretrain : j'ai besoin de la condition if pour distinguer ma balise, sinon il donnera toutes les balises <div>.
je suis coincé. :aie:
"A bâ vi" :aie:Citation:
je suis coincé. :aie:
Plus sérieusement, peux tu nous indiquer les éléments que tu possèdes pour faire cette recherche ?
Et par pitié, fait des System.out.println dans tout les sens et affiche nous le résultat de la console. Parce que juste avec le code sans savoir ce que contiennent "textArea" ou "profiArea" on ne va pas y arriver :calim2:.
le dernier code que je vous ai montré me donne le résultat suivant :
user1
user2
user3
user1
user3
message user1
message user2
message user3
message user1
message user3
tandis que moi je qu'il veux m'affiche ça :
user1
message user1
user2
message user2
user3
message user3
... etc
Si tu fait :
Tu as quoi?Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 List<Element> userElements = source.getAllElements(HTMLElementName.A); List<Element> textElements = source.getAllElements(HTMLElementName.DIV); Iterator<Element> itElement = userElements.iterator(); Iterator<Element> itTextElement = textElements.iterator(); String profiArea = new String(); String textArea = new String(); while (itElement.hasNext() && itTextElement.hasNext()) { Element userElement = itElement.next(); Element textElement = itTextElement.next(); profiArea = userElement.getAttributeValue("title"); //title="voir le profil complet" textArea = textElement.getAttributeValue("class"); System.out.println("DEBUG : "+profiArea +textArea ); if (("affTextArea".equals(textArea)) && ("voir le profil complet".equals(profiArea))) { System.out.println("\n"); String text = textElement.getContent().getTextExtractor().toString(); String user = userElement.getContent().getTextExtractor().toString(); System.out.println(user + "\n" + text); } }
DEBUG : Inscriptions en lignenull
DEBUG : site de l'IEDnull
DEBUG : Forum d'accueil- psychologienull
DEBUG : nullnull
DEBUG : nullnull
DEBUG : Liste de mes courscb_border
DEBUG : Consulter votre agenda de formationnull
DEBUG : Consulter les annonces de formationnull
DEBUG : Mon profilcb_left
DEBUG : Messagerie roundCubecb_right
DEBUG : Mes statistiques d'utilisationcb_cell
DEBUG : se déconnecternull
DEBUG : nullcb_border_title
DEBUG : nullcb_top_title
DEBUG : nullnull
........
je n'ai ni le nom d'utilisateur ni son message.