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

Langage Java Discussion :

Boucle qui ne veut pas boucler


Sujet :

Langage Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Décembre 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1
    Points : 2
    Points
    2
    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 : 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
    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
    Invité
    Invité(e)
    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.

Discussions similaires

  1. Boucle qui ne veut pas décrémenter
    Par lmplmp dans le forum Langage
    Réponses: 2
    Dernier message: 24/04/2014, 20h17
  2. [JScrollPane] qui ne veut pas se mettre en haut a gauche
    Par Cyber@l dans le forum AWT/Swing
    Réponses: 4
    Dernier message: 24/11/2006, 10h41
  3. JOptionPane qui ne veut pas se fermer!
    Par benthebest dans le forum AWT/Swing
    Réponses: 6
    Dernier message: 29/12/2005, 22h05
  4. un fichier qui ne veut pas être supprimé!!!!
    Par en_stage dans le forum Autres Logiciels
    Réponses: 4
    Dernier message: 22/10/2005, 01h08
  5. Réponses: 1
    Dernier message: 28/07/2005, 14h21

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