Précédent   Forum du club des développeurs et IT Pro > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 06/12/2012, 15h51   #1
akuralyo
Invité de passage
 
Homme
Inscription : décembre 2012
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : décembre 2012
Messages : 1
Points : 1
Points : 1
Par défaut Boucle qui ne veut pas boucler

Bonjour,

J’ai souci de boucle qui ne veut pas boucler.
Mon programme :
Le programme doit, à partir de l’URL d’une page Google, extraire les différents liens qui se trouvent dans son code source. (Utilisation d’un client http en java, bufferedReader et etc…)
J’ai récupéré chaque ligne qui m’intéresse et les ait stocké dans un vecteur. Afin d’extraire les liens, je fais une recherche par encadrement via searchtab1 et searchtab2 afin de connaitre la position exacte du lien à extraire.

La partie du code qui bloque :

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
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
	//tab : ligne à analyser
	//searchtab1 : mot recherché 1
	//searchtab2 : mot recherché 2              
	int n = 0;
 
                do {
                System.out.println("---------------    " + n + "    ---------------");
                char[] tab;
                tab = ((String) vect.elementAt(n)).toCharArray();
                //System.out.println(vect.elementAt(n));
                System.out.println("--------------------------------------------------------");
 
                for (int i = 0; i < tab.length; i++) {
                    int cpt1 = 0;
                    int P1 = -1;
                    int P2 = -1;
                    int B2 = -1;
 
                    for (int j = 0; j < searchtab1.length; j++) {
                        P1 = -1;
                        if (searchtab1[j] == tab[i + j]) {
                            cpt1 = cpt1 + 1;
                        }
                        if (cpt1 == searchtab1.length) {
                            P1 = i + searchtab1.length;
                            //System.out.println("ETAPE 1");
                            //System.out.println("\"" + search1 + " de longueur " + searchtab1.length + " trouvé de " + P1 + " à " + (P1 + searchtab1.length));
                        }
                    }
 
                    if (P1 > -1) {
                        P2 = -1;
                        //System.out.println("ETAPE 2");
                        int cpt2 = 0;
                        for (int k = P1; k < tab.length; k++) {
                            cpt2 = 0;
                            for (int l = 0; l < searchtab2.length; l++) {
                                if (searchtab2[l] == tab[k + l]) {
                                    cpt2 = cpt2 + 1;
                                }
 
                                if (cpt2 == searchtab2.length) {
                                    P2 = k;
                                    //System.out.println("\"" + search2 + "\" de longueur " + searchtab2.length + " trouvé de " + P2 + " à " + (P2 + searchtab2.length));
                                    B2 = P2;
                                    if (searchtab2.length > 1) {
                                        B2 = P2 + searchtab2.length - 1;
                                    }
                                }
                            }
                            if (cpt2 == searchtab2.length) {
                                break;
                            }
                        }
                    }
 
                    if (P1 >= 0 && B2 >= 0) {
                        //System.out.println("ETAPE 3");
                        affiche = "";
                        System.out.println("De " + P1 + " à " + B2);
 
                        for (int x = P1; x < B2; x++) {
                            affiche = affiche + tab[x];}
                        System.out.println(affiche);
                        System.out.println("--------------------------------------------------------");
                    }
                }
                System.out.println("Au suivant !!!!!!!!");
                n = n + 1;
 
            } while (n < vect.size());
Le code fonctionne mais l’incrémentation ne veut pas se faire. J’ai bien tenté un for mais cela ne marche pas non plus. J’ai même fait attention à la position du break ; .

Si quelqu’un avait la gentillesse de me dire où je me suis planté, je lui serais reconnaissant.
akuralyo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/12/2012, 16h13   #2
Enerian
Membre expérimenté
 
Homme Etienne
Ingénieur développement logiciels
Inscription : août 2011
Messages : 107
Détails du profil
Informations personnelles :
Nom : Homme Etienne
Âge : 22
Localisation : France

Informations professionnelles :
Activité : Ingénieur développement logiciels

Informations forums :
Inscription : août 2011
Messages : 107
Points : 500
Points : 500
Salut

Je ne sais pas d'où vient ton problème car je n'ai pas le courage de me plonger dans ton code. C'est assez imbuvable.

Si je peux me permettre de te donner quelques conseils :
  • Découpe les différentes parties de ton algorithme en sections que tu mets dans différentes méthodes. Puis, dans ta méthode principale, exécute les appels aux différentes sections. Comme ça tu peux rentrer progressivement dans l'algo. La méthode mère est comme le "plan" de l'algorithme, et chaque section développe une partie de ce plan.
  • Donne des noms explicites à tes variables. "P1", "B2", "tab"... Avec des noms comme ça, on ne peut pas deviner le sens des variables : il faut se plonger dans le code pour essayer de comprendre à quoi elles correspondent, ce qui est pénible. Même toi, si tu dois reprendre ton code après l'avoir laissé quelques temps, tu risques de t'y perdre. Les variables bien nommées aident à facilement comprendre le code.
  • A part dans les switch/case, je te conseille d'éviter l'instruction "break". Cet avis est plutôt controversé, mais personnellement, je pense qu'il est bien mieux d'utiliser un flag. Tu fais alors une boucle while à la place de ta boucle for (celle qui contient le break) et tu rajoute une condition sur le flag dans le while.
  • Dans ce genre de code, n'hésites pas à mettre des commentaires pour expliquer chaque partie de ton algo. Pas forcément un pavé, mais quelque chose qui permet de savoir pour chaque section ce qu'on va y faire.

En faisant ce travail, il y a déjà de bonnes chances pour que tu trouve l'origine du problème.
Enerian est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h54.


 
 
 
 
Partenaires

Hébergement Web