C# problème dans une boucle

Résolu
morgan7609 Messages postés 7 Date d'inscription dimanche 20 décembre 2015 Statut Membre Dernière intervention 21 décembre 2015 - 20 déc. 2015 à 13:39
morgan7609 Messages postés 7 Date d'inscription dimanche 20 décembre 2015 Statut Membre Dernière intervention 21 décembre 2015 - 21 déc. 2015 à 18:54
Bonjour,
Je dois réaliser une sorte de tirage loto, je dois créer un tableau de taille 7, ensuite a l'aide de boucles, je dois tirer 7 numéro compris entre 1 et 49, et grâce aux boucles éviter les doublons, et ensuite à l'aide d'une méthode affichez les 7 numéro tirez dans un tableau.
Le problème est que je me retrouve avec des doublons de 0, qui sorte de je ne sais ou je n'arrive pas a trouver l’erreur. J'ai déjà essayer avec différente méthode, mais j'obtiens: numero, 0, numéro, 0, numero, 0, numero.
C'est comme ci, la boucle tirez un numero, mais qu'après, il se passait rien.
Voila mon code:
namespace ConsoleApplication6
{
class Program
{
static void Main(string[] args)
{
int[] tableau = TirageLoto();

for (int i = 0; i < tableau.Length; i++)
{
Console.WriteLine(tableau[i].ToString());
}

}

static int[] TirageLoto()
{
int[] tab = new int[7];
Random rdm = new Random();
for (int i = 0; i < 8; i++)
{
int numero = rdm.Next(1, 50);
bool trouver = false;


for (int boule = 0; boule < i-1; boule++)
{
if (tab[boule] == numero && tab[boule] ==0 )
{
trouver = true; break;
}
}

if (!trouver)
{
tab[i] = numero;
i++;
}

}
return tab;
}

}
}


Merci à vous de vos futures réponse.

9 réponses

Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
20 déc. 2015 à 20:30
1
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
20 déc. 2015 à 22:00
Quand tu exécutes en pas à pas, la ligne qui va être exécutée en est jaune, tu peux survoler les variables pour voir leur contenu.
Les variables locales et celles que tu as définie en espion (par clim droit) sont aussi visible en dessous du code


A ce moment par exemple, tab est rempli de 0..

Si je du pas à pas jusqu'à la fin du for principal pendant une itération voici ce que j'observe:
  • i est initié à 0
  • numero vaut 33
  • trouver vaut 33
  • le 2eme for n'est pas exécuté
  • on rentre dans le if
  • la casse 0 de tab vaut 33
  • i vaut 1


et je suis à la fin de l'itération, si je clique à nouveau sur le bouton, je retourne dans la ligne d'instruction du for principal pour une nouvelle itération.

Peux tu me dire, pour ces étapes, le pourquoi du comment.
1
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
21 déc. 2015 à 00:18
Tout d'abord, ton point d'arrêt à return Tab, j'en suis très loin....

J'ai mis un point d'arrêt avant
int[] tab = new int[7];
et ensuite, F11, F11, F11....

Il n'y a que comme ça que tu pourras débuguer ce code, et les suivants.
Si je te donne la solution sur un tableau, d'une part j'enfreindrais les règles de ce forum et d'autre part ça ne t'apportera rien.

Alors que si tu arrives à utiliser le mécanisme d'exécution pas à pas, que tu regardes ce que le code fait (et pas ce que tu crois qu'il fait) le bénéfice sera réel.

Passe 2 ou 3 itérations de ton for principal, analyse bien tout, essaye de voir ce qui se passerait si un doublon était tiré, voire même force le, dans la fenêtre de variables locales, tu peux changer leurs valeurs, à la 3eme itération assigne un foulon à numéro si le hazard ne te l'a pas donné.

Je t'ai exposé la chronologie des faits, tu devrais pouvoir m'en donner les causes, et ce sur 3 itérations.
1
morgan7609 Messages postés 7 Date d'inscription dimanche 20 décembre 2015 Statut Membre Dernière intervention 21 décembre 2015
20 déc. 2015 à 19:30
Bonsoir, merci de ta réponse.

Comment je peux exécuter pas a pas? En réduisant la taille du tableau ou de la boucle for principal?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
morgan7609 Messages postés 7 Date d'inscription dimanche 20 décembre 2015 Statut Membre Dernière intervention 21 décembre 2015
20 déc. 2015 à 21:26
Merci, c'est très utiles.
Pour le résultat: -ça me dit que les paramètres de la méthode Main, le string arg à une valeur entre crochet de 0 ( c'est marquer {string[0]}
- Le deuxième et dernier élément de se débogage, ça me dit que ma variable int[] tableau à une valeur null.
J'ai que ça comme résultat, je sais pas si c'est normal ou pas.
Quand tu me demande mon interprétation, c'est ce que je conclus de ce résultat?
J'en conclus qu'il y à un problème avec ma variable, qu'elle na pas de valeur?
Je suis désolé je sais pas trop comment interpréter, je débute dans le c#, c'est pas si évident que ça.
0
morgan7609 Messages postés 7 Date d'inscription dimanche 20 décembre 2015 Statut Membre Dernière intervention 21 décembre 2015
20 déc. 2015 à 23:44
Mais comment tu fais pour arriver à voir comme cela?
Moi quand je fais déboguer pas à pas en détail, beh ça ne me fais pas tout cela. J'obtiens ce que je t'ai dis, et si je mais un point d’arrêt après return tab; beh j'ai un autre petit truc, mais pas aussi détailler que toi tu as.

Quand tu me dis le pourquoi du comment, tu veux que je te dise quoi?
j'ai mis une boucle for principal pour initialisé mon random et ma valeur booléen, ensuite la deuxième boucle for est pour éviter les doublons, et le if est pour ajouter le numéro dans le tableau.
Je ne comprend vraiment pas mon erreur. Sa fait une semaine que je chercher le pourquoi.
0
morgan7609 Messages postés 7 Date d'inscription dimanche 20 décembre 2015 Statut Membre Dernière intervention 21 décembre 2015
Modifié par morgan7609 le 21/12/2015 à 00:48
D'accord, je vais essayer demain de mettre un point d’arrêt avant le tab et analyser ça.
Non non, je ne souhaite pas qu'on me donne la solution, juste à m'aider à comprendre mes erreurs.
Je te redirais si j'ai trouver le hic demain ( enfin plutot tout a l'heure ^^ )
0
morgan7609 Messages postés 7 Date d'inscription dimanche 20 décembre 2015 Statut Membre Dernière intervention 21 décembre 2015
21 déc. 2015 à 16:24
Désole du doublon.
J'ai regarder en pas a pas attentivement.
J'ai remarquer que i = 0, marche correctement jusqu'à la fin, mais lors que je suis dans i =0 , et qu'on se retrouve à la fin du dernier if ( celui qui met le numéro dans le tableau ) , j'ai constaté quand étant toujours dans i = 0, et qu'on arrive à la fin du if, on passe à i = 1 , donc après maintenant que c'est marquer i = 1 et qu'on continu l'itération , on passe à la fin de la 1er boucle for ( on retourne à i++ toujours étant dans i = 1 ) , après sa passe à i<8 , et a ce moment la ça passer à l'itération suivante, ce qui veut dire i = 2 , donc i =1 n'a pas de valeur.
J'ai pu en conclure que il y avait un problème avec i++, mais lors que je le supprime dans la 1 er boucle for, sa me dit que l'index se retrouve en dehors du tab. Donc je dois regarder pourquoi cela fait çà
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
21 déc. 2015 à 18:10
Un for s'écrit toujours
for (type variable = Valeur de Départ; condition sur la variable; loi d'incrément (ou décrément) de la variable)

Partant de ce constat, ton for tel que tu l'as montré ici est bien écrit.
Par conséquent le i++ dans le if n'a pas lieu d'être.

Ça ne va pas entièrement te sauver, mais c'est le début d'une solution.
0
morgan7609 Messages postés 7 Date d'inscription dimanche 20 décembre 2015 Statut Membre Dernière intervention 21 décembre 2015 > Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024
21 déc. 2015 à 18:54
Lorsque je retire le i++ du if, plus riens de marche, la console s'affiche, mais rien dedans.
J'ai enlever le i++ de la boucle for, même si j'ai appris comme tu la dis , qu'un boucle for s'écrit avec une incrementation ou decrementation, mais je l'ai enlever, et j'ai réduit une boucle du for principal, et cela marche. J'ai essayer une dizaine de fois. Et tout a été et j'ai vérifié qu'il n'y avait pas de doublons.
Je te remercie de ce que tu as fait pour moi.
Je ne cherchais pas a ce qu'on me donne la solution directement. Car je n'aime pas ça.
Je préfère qu'on m'aide a situe ou son mes erreurs et les comprendre. Car c'est pas en donnant une solution directement, qu'on comprend
Et comme dit u' vieux dicton '' c'est en forgeant qu'on devient forgeron ''
En toit cas merci de m'avoir monter l'exécution pas a pas. Cette chose ma permis de trouver mon erreur. C'est très utile.
0
Whismeril Messages postés 19024 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 18 avril 2024 656
Modifié par Whismeril le 20/12/2015 à 17:45
Bonsoir as tu exécuté en pas à pas?

Car dès la première itération de ton for le symptôme apparait.
Reviens avec la description de ce qui se passe ( en français) pendant cette première itération et si possible ton interprétation.

Quand j'étais petit, la mer Morte n'était que malade.
George Burns
-1
Rejoignez-nous