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
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
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 ?
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 )
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());} }
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:
2) tu libère pas tes ressources (mais bon, on va partir de la supposition "code pas fini")
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 }
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?
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
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é...
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 ) */ }
Sinon ce que tu appelles une insertion c'est : tab1[i][h1]=1 ?
@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
Oublie l'indentation plus l'absence de coloration syntaxique, je n'ai pas vu que c'était du code commenté
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.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
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 ) */ }
@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
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
Or il fallait ajouter celui là
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;};
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
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager