C# problème dans une boucle [Résolu]

morgan7609 7 Messages postés dimanche 20 décembre 2015Date d'inscription 21 décembre 2015 Dernière intervention - 20 déc. 2015 à 13:39 - Dernière réponse : morgan7609 7 Messages postés dimanche 20 décembre 2015Date d'inscription 21 décembre 2015 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

11 réponses

Meilleure réponse
Whismeril 12117 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 20 déc. 2015 à 20:30
1
Merci
https://msdn.microsoft.com/fr-fr/library/aa291565(v=vs.71).aspx

Merci Whismeril 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de Whismeril
Meilleure réponse
Whismeril 12117 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 20 déc. 2015 à 22:00
1
Merci
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.

Merci Whismeril 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de Whismeril
Meilleure réponse
Whismeril 12117 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 21 déc. 2015 à 00:18
1
Merci
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.

Merci Whismeril 1

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 102 internautes ce mois-ci

Commenter la réponse de Whismeril
morgan7609 7 Messages postés dimanche 20 décembre 2015Date d'inscription 21 décembre 2015 Dernière intervention - 20 déc. 2015 à 19:30
0
Merci
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?
Commenter la réponse de morgan7609
morgan7609 7 Messages postés dimanche 20 décembre 2015Date d'inscription 21 décembre 2015 Dernière intervention - 20 déc. 2015 à 21:26
0
Merci
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.
Commenter la réponse de morgan7609
morgan7609 7 Messages postés dimanche 20 décembre 2015Date d'inscription 21 décembre 2015 Dernière intervention - 20 déc. 2015 à 23:44
0
Merci
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.
Commenter la réponse de morgan7609
morgan7609 7 Messages postés dimanche 20 décembre 2015Date d'inscription 21 décembre 2015 Dernière intervention - Modifié par morgan7609 le 21/12/2015 à 00:48
0
Merci
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 ^^ )
Commenter la réponse de morgan7609
morgan7609 7 Messages postés dimanche 20 décembre 2015Date d'inscription 21 décembre 2015 Dernière intervention - 21 déc. 2015 à 16:24
0
Merci
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 çà
Whismeril 12117 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 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.
morgan7609 7 Messages postés dimanche 20 décembre 2015Date d'inscription 21 décembre 2015 Dernière intervention > Whismeril 12117 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - 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.
Commenter la réponse de morgan7609
Whismeril 12117 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 19 octobre 2018 Dernière intervention - Modifié par Whismeril le 20/12/2015 à 17:45
-1
Merci
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
Commenter la réponse de Whismeril

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.