Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 2 sur 2
  1. #1
    Invité de passage
    Homme Profil pro
    Inscrit en
    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.

  2. #2
    Membre émérite
    Avatar de Enerian
    Homme Profil pro Etienne Tissières
    Ingénieur développement logiciels
    Inscrit en
    août 2011
    Messages
    224
    Détails du profil
    Informations personnelles :
    Nom : Homme Etienne Tissières
    Âge : 23
    Localisation : France

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

    Informations forums :
    Inscription : août 2011
    Messages : 224
    Points : 827
    Points
    827

    Par défaut

    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.

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •