Bug dans mon système aléatoire (random)
Résolu
cindylechat
Messages postés
24
Date d'inscription
Statut
Membre
Dernière intervention
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je programme en c# WinForms, et j'ai un bug avec mon programme, je me demande si quelqu'un peut m'aider à trouver le problème.
Donc voilà, je fais un programme style quiz afin d'apprendre les notes sur une guitare. Il y a une corde de donnée ainsi qu'une note. L'utilisateur doit répondre aux questions avec la position de cette note sur la corde. Alors, j'ai créé un système aléatoire pour poser des questions aléatoires.
Mon problème: mon système aléatoire ne fonctionne pas correctement. Les possibilités sont les suivantes: 5 cordes (A, B, D, E, G) , 7 notes en notation anglaise (A, B, C, D, E, F, G). Pourtant, mon système ne me sort que les combinaisons suivantes (corde, note): (A, A) , (A, B), (B, B), (B, C), (D, C), (D, D), (E, D), (E, E), (G, F) et (G,G).
Il doit y avoir quelque chose que j'ai mal écrit, et j'ai cherché et je ne trouve vraiment pas la solution à mon problème.
Voici mon code:
Je programme en c# WinForms, et j'ai un bug avec mon programme, je me demande si quelqu'un peut m'aider à trouver le problème.
Donc voilà, je fais un programme style quiz afin d'apprendre les notes sur une guitare. Il y a une corde de donnée ainsi qu'une note. L'utilisateur doit répondre aux questions avec la position de cette note sur la corde. Alors, j'ai créé un système aléatoire pour poser des questions aléatoires.
Mon problème: mon système aléatoire ne fonctionne pas correctement. Les possibilités sont les suivantes: 5 cordes (A, B, D, E, G) , 7 notes en notation anglaise (A, B, C, D, E, F, G). Pourtant, mon système ne me sort que les combinaisons suivantes (corde, note): (A, A) , (A, B), (B, B), (B, C), (D, C), (D, D), (E, D), (E, E), (G, F) et (G,G).
Il doit y avoir quelque chose que j'ai mal écrit, et j'ai cherché et je ne trouve vraiment pas la solution à mon problème.
Voici mon code:
//Prend une corde au hasard string[] tableauCorde = { "A", "B", "D", "E", "G" }; Random rnd1 = new Random(); int iCorde = rnd1.Next(5); string corde = tableauCorde[iCorde]; etq_quelle_corde.Text = corde; //L'utilisateur répond avec des frets if (bFret) { //Prend une note au hasard string[] tableauNote = { "A", "B", "C", "D", "E", "F", "G" }; Random rndnote = new Random(); int iNote = rndnote.Next(7); string note = tableauNote[iNote] ; etq_quelle_note.Visible = true; etq_quelle_note.Text = note; }
EDIT : Ajout des balises de code
Merci d'avance.
A voir également:
- Bug dans mon système aléatoire (random)
- Restauration systeme windows 10 - Guide
- Cette action ne peut pas être réalisée car le fichier est ouvert dans system - Guide
- Bug chromecast - Guide
- Fichier ouvert dans system ✓ - Forum Windows
- Tirage au sort excel aléatoire sans doublon ✓ - Forum Excel
2 réponses
Je viens d'essayer ça
J'ai enlevé les contrôles, que je n'ai pas et j'ai fait une boucle pour avoir 20 combinaisons.
Le random est bien déclaré pour une portée supérieure et il n'y en un bien un seul d'utiliser pour mes 20 combinaisons, soit 40 tirages.
1ere exécution
2eme exécution
Donc à priori, j'ai un peu tout et pas dans le même ordre.
List<string> combinaisons = new List<string>(); Random rnd1 = new Random(); for (int i = 0; i < 20; i++) { string[] tableauCorde = { "A", "B", "D", "E", "G" }; int iCorde = rnd1.Next(5); string corde = tableauCorde[iCorde]; if (true) { //Prend une note au hasard string[] tableauNote = { "A", "B", "C", "D", "E", "F", "G" }; int iNote = rnd1.Next(7); string note = tableauNote[iNote]; combinaisons.Add(string.Format("Code : {0}, Note {1}", corde, note)); } } string resultatForum = string.Join("\r\n", combinaisons);
J'ai enlevé les contrôles, que je n'ai pas et j'ai fait une boucle pour avoir 20 combinaisons.
Le random est bien déclaré pour une portée supérieure et il n'y en un bien un seul d'utiliser pour mes 20 combinaisons, soit 40 tirages.
1ere exécution
Code : B, Note G
Code : B, Note B
Code : E, Note E
Code : A, Note C
Code : A, Note G
Code : D, Note E
Code : B, Note G
Code : A, Note G
Code : D, Note F
Code : G, Note A
Code : B, Note A
Code : A, Note C
Code : G, Note B
Code : E, Note D
Code : A, Note B
Code : G, Note B
Code : E, Note G
Code : A, Note C
Code : A, Note F
Code : A, Note A
2eme exécution
Code : B, Note E
Code : G, Note C
Code : A, Note A
Code : D, Note F
Code : D, Note F
Code : G, Note C
Code : G, Note D
Code : D, Note A
Code : D, Note F
Code : A, Note A
Code : E, Note C
Code : D, Note D
Code : D, Note F
Code : D, Note D
Code : D, Note B
Code : A, Note C
Code : D, Note D
Code : E, Note B
Code : E, Note E
Code : A, Note C
Donc à priori, j'ai un peu tout et pas dans le même ordre.
Bonsoir
pour que ton code soit lisible sur le forum, merci d'utiliser la coloration syntaxique, voir la procédure ici. Pour cette fois, j'ai demandé à la modération d'éditer ton message. Merci Jordane.
Concernant ton soucis
Essaye de mettre ton random global sur la classe.
Tu fais un Next pour la corde et un Next pour la note
pour que ton code soit lisible sur le forum, merci d'utiliser la coloration syntaxique, voir la procédure ici. Pour cette fois, j'ai demandé à la modération d'éditer ton message. Merci Jordane.
Concernant ton soucis
Essaye de mettre ton random global sur la classe.
Tu fais un Next pour la corde et un Next pour la note
J'ai testé avec cela:
J'ai toujours le même problème..
J'ai toujours le même problème..
//Prend une corde au hasard string[] tableauCorde = { "A", "B", "D", "E", "G" }; Random rnd1 = new Random(); int iCorde = rnd1.Next(5); string corde = tableauCorde[iCorde]; etq_quelle_corde.Text = corde; if (bFret) { //Prend une note au hasard string[] tableauNote = { "A", "B", "C", "D", "E", "F", "G" }; int iNote = rnd1.Next(7); string note = tableauNote[iNote]; etq_quelle_note.Visible = true; etq_quelle_note.Text = note; }
Merci d'avoir pris le temps de m'aider !
Bonne fin de soirée :)
Il possède d'ailleurs 2 constructeurs, le deuxième prend un int en paramètre et il est conseillé d'utiliser quelque chose qui change, l'heure par exemple.
Et donc, en utilisant autant de random que de tirage, tu as de grandes chances d'avoir des début de séquences identiques.
Si ça te convient, merci de marquer le sujet résolu avec le lien dédié, juste en dessous du titre de la discussion. Idem pour la précédente.