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

Java Discussion :

Boucle "for" dans une boucle "while"


Sujet :

Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Points : 85
    Points
    85
    Par défaut Boucle "for" dans une boucle "while"
    Bonjour,
    j'ai eu un problème en voulant ajouter une boucle for dans une boucle while
    est ce que c'est normal où il s'agit d'une erreur sur mon code ?
    Merci pour vos réponses

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Kei,

    En ce moment, ça pose problème pour te donner une réponse : les boules de cristal sont en grève.

    Plus sérieusement, comment veux-tu qu'on parle de ton code sans le connaître ? En lisant tes pensées pour le lire en même temps ?

  3. #3
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par WhiteTigerZ Voir le message
    est ce que c'est normal
    Non

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Points : 85
    Points
    85
    Par défaut
    Bonjour,
    @tchize_= Merci pour votre réponse.
    @Droggo : Loool², je croyais que java n'accepte pas les boucles imbriquées (à vrai dire je ne voulais pas admettre que le problème vient de mon code (c'est ente nous:p ) )
    Bon, mon problème est la suivante : je veux faire une application qui permet de trouver une séance de rattrapage pour un enseignant donc si droggo s'absente de son classe le jour "j" à l'heure "x" il faudrait que l'application lui trouve 1 séance de rattrapage.
    les contraintes sont :
    l'emploi du temps de droggo (enseignant)
    l'emploi du temps de la classe à qui il s'est absentée
    +
    une salle libre
    mon algorithme est le suivant :
    j'ai modélisé mon problème en déclarant 2 matrices( initialisées à 0 dès le départ), 1 pour l'emploi du temps de l'enseignant et une pour l'emploi du temps de la classe.En se connectant à la table emploi de mon BD les 0 seront remplacés par 1.
    Rq :
    nombre de ligne de la matrice est de 6 --> du lundi au samedi
    nombre de colonne de la matrice est 9 --> l'horaire : Voir l'image
    Exple :
    si j'enseigne le lundi de 8 a 9hr et samedi de 17h à 18hr
    mat1[0][0]=1 ;
    mat2[5][7]=1;

    Enfin je parcoure mes 2 tableaux dans le cas où mat_enseignant[l][c]=mat_classe[l][c]=0 --> séance de rattrapage trouvée

    j'èspere que vous avez capté ce que j'ai écrit (je sais c'est pas évident XD)
    PS : voir les images
    je vous envoie le code dès que vous auriez assimiler tout ça.
    Merci pour vos réponses )
    Images attachées Images attachées   

  5. #5
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par WhiteTigerZ Voir le message
    je vous envoie le code dès que vous auriez assimiler tout ça.
    Merci pour vos réponses )
    ce qui est dommage car le code et ce qu'il te fait comme problème c'est justement qu'on ta demandé et ce que tu n'a pas fourni....

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Points : 85
    Points
    85
    Par défaut le code :D
    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
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
     private void trouverActionPerformed(java.awt.event.ActionEvent evt) {                                        
        Statement ste,ste2;
        connexion_base con ;
        ResultSet res_ens,res_c ;
        int[][] tab1,tab2 ; // j'ai dù les nommée en mat :roll:
        String cl = null  ;
        String type = null ;
        try {
            // Connexion à la base
        con=new connexion_base(); 
        con.connecte();
        ste=con.getStatement();
        ste2=con.getStatement();
     
            // enregistrements des valeurs saisies dans des variables
        String a=id.getText();
        Object x=jour.getSelectedItem();
        String b=x.toString();
        char ch=b.charAt(0);
        String c=debut.getText();
        String d=fin.getText();
    // déclaration des 2 matrices
        tab1=new int[6][8] ;
        tab2=new int[6][8] ;
           // 
          String req2="select * from emploi where code_enseignant='"+a+"' and code_journee='"+ch+"' and h_deb='"+c+"' and h_fin='"+d+"' ";
          res_c=ste2.executeQuery(req2);
           while (res_c.next())
           {
               cl=res_c.getString(2); // désigne le code_classe de la classe à qui 
    // l'enseignant s'est absenté
               type=res_c.getString(5);// désigne le type de cours (TD,cours)
    // pas important pour mon problème !!
              }
          for (int i=0; i<=5; i++) {
             // insertion des zéros dans les 2 matrices : initialisation
           for (int j=0;j<=7;j++){
               tab1[i][j]=0;
               tab2[i][j]=0;
           }
           // insertion dans la matrice enseignant
     
            int h=i+1; 
    // remarque 1 désigne lundi,2 désigne mardi...jusqu'au samedi "6" 
            String hh = Integer.toString(h);
     
           String req="select * from emploi where code_journee='"+hh+"' and code_enseignant='"+a+"' order by h_deb ";
           res_ens=ste.executeQuery(req);
           while (res_ens.next())
           {
     
              String hr_deb=res_ens.getString(6);
              String hr_fin=res_ens.getString(7);
              int h1=Integer.parseInt(hr_deb);
              int h2=Integer.parseInt(hr_fin);
     
              if (h1 <= 12){ h1=h1-7;}
              else {h1=h1-9;};
     
              if (h2 <= 12){ h2=h2-8;}
              else {h2=h2-10;};
              while (h1<=h2)
              { 
                tab1[i][h1]=1 ;
                h1++ ;
     /* le problème se situe ici !!! il ne veut pas faire l'insertion c'est comme s'il refuse l'insertion, j'ai du supprimer l'instruction d'insertion et la remplaçant par 1 instruction d'affiche System.out.print("test"); afin de s'assurer que la boucle tourne bien (ca marche ) */
              }
     
             affiche(tab1,h1,h2);
     
              };
             // insertion dans la matrice classe : PAS IMPORTANT le même principe // que celui de la matrice enseignant ne pas VOIR
              /* 
                  String req_cl = "select * from emploi where code_journee='" + hh + "' and code_classe='" + cl + "' order by h_deb ";
              res_c=ste2.executeQuery(req_cl);
               while (res_c.next())
           {
              String hr_deb=res_c.getString(6);
              String hr_fin=res_c.getString(7);
              int h1=Integer.parseInt(hr_deb);
              int h2=Integer.parseInt(hr_fin);
              
              if (h1 <= 12){ h1=h1-7;}
              else {h1=h1-9;};
     
              if (h2 <= 12){ h2=h2-8;}
              else {h2=h2-10;};
     
            
           }*/
     
     
     
     
            }
        }catch (SQLException ex){JOptionPane.showInternalMessageDialog(getContentPane(),ex.getMessage());}
        }

  7. #7
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    quelques remarques:
    1) ton premier while est curieux. Tu ne prend que la dernière ligne.Je suppose qu'il n'y en a qu'une seule. Le code devrais donc être:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
          String req2="select * from emploi where code_enseignant='"+a+"' and code_journee='"+ch+"' and h_deb='"+c+"' and h_fin='"+d+"' ";
     
          res_c=ste2.executeQuery(req2); 
           if (res_c.next())
           {
               cl=res_c.getString(2); // cl désigne le code de la classe
               type=res_c.getString(5); // type désigne type de cours
              } else {
           // erreur, a traiter
          }
    2) tu libère pas tes ressources (mais bon, on va partir de la supposition "code pas fini")
    3) dans ta dernière boucle tu ne met pas à jour la matrice
    4) quel est ton problème? Le code de comparaison que tu mentionnait plus haut n'apparait nulle part dans ton code

    et pitié, un effort pour avoir une indentation cohérente?

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Points : 85
    Points
    85
    Par défaut merciii
    merci tchize,
    J'ai pas vu que tu étais connecté c'est pour ça que j'ai envoyé ma réponse sans indentation (que j'apprêtais a éditer à l'instant qui suive, 1 habitude que j'ai depuis longtemps je publie ensuite j'édite )

    Tout de même désole pour la gêne occasionnée, j'ai fait quelques efforts, je ne sais pas si c'est cohérent à toi de juger.

    Pour le premier while bien vu il n'y a qu'une ligne étant donnée que la requête permet de voir les informations de l'enseignant X qui s'est absente le jour Y de l'heure hr à l l'heure hr2.

    pour ta 4 ème remarque celle de la mise à jour de la matrice j'ai pas bien saisi ce que tu veux dire

    Mon problème se situe l'hors de l'insertion des 1 : (prière de voir le code, je viens d'ajouter des commentaires suite à ta remarque)



    Merci pour ton temps

  9. #9
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 951
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 951
    Points : 5 671
    Points
    5 671
    Par défaut
    Qia,
    Citation Envoyé par WhiteTigerZ Voir le message
    J'ai pas vu que tu étais connecté c'est pour ça que j'ai envoyé ma réponse sans indentation (que j'apprêtais a éditer à l'instant qui suive, 1 habitude que j'ai depuis longtemps je publie ensuite j'édite
    Ça, c'est curieux.

    Un couper/coller depuis ton éditeur devrait tout faire en même temps.

  10. #10
    Membre averti
    Homme Profil pro
    Développeur Java
    Inscrit en
    Avril 2004
    Messages
    265
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Avril 2004
    Messages : 265
    Points : 342
    Points
    342
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
              while (h1<=h2)
              {
                tab1[i][h1]=1 ; /* le problème se situe ici !!! il ne veut pas faire l'insertion c'est comme s'il refuse l'insertion, j'ai du supprimer l'instruction d'insertion et la remplaçant par 1 instruction d'affiche System.out.print("test"); afin de s'assurer que la boucle tourne bien (ca marche ) */
              }
    Je suis étonné de lire dans le commentaire que ça fonctionne avec un System.out, ça ressemble beaucoup à une boucle infinie puisque ni h1 ni h2 n'est modifié...

    Sinon ce que tu appelles une insertion c'est : tab1[i][h1]=1 ?

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Points : 85
    Points
    85
    Par défaut
    @gailuris :
    bonjour, j'ai juste oublié cette instruction lorsque j'ai transformé la boucle for en while lors de la publication du code.

    pour ta remarque à propos de l'insertion, oui c'est ça.
    @Droggo :
    Xd, oui c'est curieux :pp sinon pour ton conseil je le prends on s'est jamais

  12. #12
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    Citation Envoyé par WhiteTigerZ Voir le message

    pour ta 4 ème remarque celle de la mise à jour de la matrice j'ai pas bien saisi ce que tu veux dire
    Oublie l'indentation plus l'absence de coloration syntaxique, je n'ai pas vu que c'était du code commenté

    Mon problème se situe l'hors de l'insertion des 1 : (prière de voir le code, je viens d'ajouter des commentaires suite à ta remarque)
    Merci pour ton temps
    Comme déjà fait remarqué, ta boucle est infinie, soit tu ne rentre pas dedans (critère à false), soit tu rentre dedans et tu n'en sortira plus.

    Tu est sur que ce n'est pas plutot ça que tu essaie de faire??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
              if (h1<=h2)
              {
                tab1[i][h1]=1 ; /* le problème se situe ici !!! il ne veut pas faire l'insertion c'est comme s'il refuse l'insertion, j'ai du supprimer l'instruction d'insertion et la remplaçant par 1 instruction d'affiche System.out.print("test"); afin de s'assurer que la boucle tourne bien (ca marche ) */
              }

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Points : 85
    Points
    85
    Par défaut
    @tchize_: le problème se situe dans l'intervalle h1 et h2 que tu as mentionnée.Je vais aller m'endormir maintenant, ensuite je retourne après j'ai besoin de repos.
    Dans le cas où je ne trouve pas la solution je t'enverrai tout le projet.(sql+code souce) tout de même si je la trouve je te l'enverrai aussi (j'aiiime tes remarques)

    PS :
    J'utilise Netbeans comme IDE.
    Aller bonne sieste à tous

  14. #14
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 804
    Points
    48 804
    Par défaut
    avec le ++ que tu as depuis rajouté dans ton code c'est déjà mieux. Pour la lisibilité, pourrais-tu éviter de modifier continuellement le code d'origine et reposter le code si tu fais des modifications, sinon le sujet va vite devenir illisible!

    maintenant, qu'est-ce qui te fait croire que tab1 n'est pas changé même si on rentre dans le while?

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Août 2006
    Messages
    193
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : Tunisie

    Informations forums :
    Inscription : Août 2006
    Messages : 193
    Points : 85
    Points
    85
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    avec le ++ que tu as depuis rajouté dans ton code c'est déjà mieux. Pour la lisibilité, pourrais-tu éviter de modifier continuellement le code d'origine et reposter le code si tu fais des modifications, sinon le sujet va vite devenir illisible!

    maintenant, qu'est-ce qui te fait croire que tab1 n'est pas changé même si on rentre dans le while?
    Heyyy tchize, désolé pour le retard, le problème se situe ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     if (h1 <= 12){ h1=h1-7;}
              else {h1=h1-9;};
     
              if (h2 <= 12){ h2=h2-8;}
              else {h2=h2-10;};
    Or il fallait ajouter celui là
    if (h1 < 12){ h1=h1-8;}
    else {h1=h1-10;};

    if (h2 <= 12){ h2=h2-9;}
    else {h2=h2-11;};

    J'ai oublié qu'en Java l'indice du tableau commence de 0, d'où j'ai eu ce problème d'ajout.

    A+, WhiteTigerZ :p

Discussions similaires

  1. [Batch] Boucle for imbriquee dans une boucle if qui refuse de fonctionner
    Par Egan69 dans le forum Scripts/Batch
    Réponses: 2
    Dernier message: 27/06/2013, 20h30
  2. Réponses: 2
    Dernier message: 23/03/2013, 01h42
  3. [MySQL] récupérer dans une boucle chaque information MySQL dans une variable différente
    Par gtenthorey dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 06/05/2007, 23h34
  4. Réponses: 3
    Dernier message: 06/07/2004, 11h21

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