Une reponse au hasard... [Résolu]

Signaler
Messages postés
15
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 juin 2006
-
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
-
Bonjour à tous !!!
Voila mon probleme, je veux que mon programme génére une reponse au hasard parmi celle citée
Lorsque l'utilisateur dit "aurevoir" je veux que le programme reponde SOIT "Tchao" OU "A+" et non les deux. Comment faire???

Voici le code:
if

(msg
.CompareTo("aurevoir") == 0 )
{

session.send("Tchao");

session.send("A+");
}

Merci d'avance pour vos reponses

16 réponses

Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
Salut,
Pour générer un nombre aléatoire, tu peux utiliser la class Random.

<hr size= "2" /> VC# forever
=13319
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
Salut
Essaie ca :

<hr />if (
new
Random(
DateTime.Now.Millisecond).Next(2) == 0)

   session.Send(
"tchao");

else
   session.Send(
"a+");

<hr />
Mx
MVP C# 
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
Ca marche peut etre, mais ce n'est pas bon.
En fait il faut prendre moins de raccourcis que j'en ai pris dans le premier exemple, a savoir, generer l'instance de Random dans le if.
La, il faut que tu generes ton instance en dehors du if, que tu recuperes l'entier que te renvoie la méthode Next, et que tu bases tes if dessus (et non pas reinstancier un Random dans chaque if, ca n'a plus de sens)

<hr />

Random rand =
new
Random(
DateTime.Now.Millisecond);

int value = rand.Next(3);
// Valeur maximale retournée par le Next : 3
if (value == 0) session.Send(
"Tchao");

else
if (value == 1) session.Send(
"a+");

else session.Send(
"Salut");
<hr />

Mx
MVP C# 
Messages postés
150
Date d'inscription
dimanche 14 mars 2004
Statut
Membre
Dernière intervention
21 décembre 2007
2
heu jpige pas mais pourquoi tu utilise pas directe un case
ca ira deja plus vite
et tu ne serait pas limiter en nombre de reponse.
pour une valeur de 0->3 ben Next(3)

Dans lexemple de MorpionMx apres le int value=rand.Next(3)

switch (value)
{
  case 0:
    //code
  break;
  case 1:

    //code

  break;
  case 2:

    //code

  break;
....

  defautl:

    //code

  break;

}

et voila, pour le reste ta plus qu'à étendre le code
Messages postés
15
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 juin 2006

Ok merci sa marche sans probleme. Mais pour 3 reponses cela ne marche pas :

if

(new Random(DateTime
.Now
.Millisecond
).Next(3) == 0)

session
.send("Salut ");

else if

session
.send("Hello");

else

session
.send("Slt !!! :)");
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
Oui c'est normal.
Essaies de comprendre ce que tu as fait la, tu verras que c'est logique.

Mx
MVP C# 
Messages postés
15
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 juin 2006

J'ai retouché le code et il n'y a pas d'erreur.
Cela a l'air de produire ce que je veux...
Je me demande si c'est bon quand même...
Au fait le .Next il sert à quoi exactement ??

if

(new Random(DateTime
.Now
.Millisecond
).Next(3) = = 0)

session
. send ("Salut ");

else if (new Random(DateTime
.Now
.Millisecond
).Next(3) == 0)

session
.send("Hello");

else

session
.send("Slt !!! :)");
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
J'oubliais : Doc de la classe Random

Mx
MVP C# 
Messages postés
5487
Date d'inscription
dimanche 4 août 2002
Statut
Modérateur
Dernière intervention
20 juin 2013
54
Pour le link sur la documentation, je l'avais mis dans le premier poste.... héhé.

<hr size= "2" /> VC# forever
=13319
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
Oups, mince, en effet :p
Du coup, plus d'excuse pour la question concernant l'utilité de la méthode Next()

Mx
MVP C# 
Messages postés
15
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 juin 2006

Ok Merci pour toutes vos reponses !!!

J'ai utilisé le case comme recommander par 245485 Coolpix08

Sa marche hyper bien ;)

Ca me donne :

Random rand
= new Random(DateTime
.Now
.Millisecond
);

int value
= rand
.Next(2);

switch (value
)

{

case 0:

session.send("Tchao");

break;

case 1:

session.send("a+");

break;

case 2:

session.send("Salut");

break;

}
Messages postés
3246
Date d'inscription
lundi 25 avril 2005
Statut
Modérateur
Dernière intervention
27 octobre 2012
38
Sauf que là ça ne donnera jamais "Salut"..
Messages postés
15
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 juin 2006

Ba pourquoi???

Regarde j'ai la variable int value rand.Next
(2); Donc elle est comprise entre 0 et 2

Donc lorsque int value = 2 cela envoie "Salut"

Je dois surement me tromper mais c'est comme sa que j'apprends. Si tu pouvais m'éclairer.

Ou peut-être que je remplace case 2:
par
default

?????
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
Disons que si tu regardais la Doc (t'as quand meme 2 fois le lien), tu verrais que la méthode Next(maxValue) renvoit une valeur comprise entre 0 et maxValue (non incluse).
Il n'y aura jamais de 2, juste 0 et 1.
Donc dans ton cas, tu dois specifier 3 en maxValue.

Quant a default:, il s'effectue quand tu ne "gere" pas la condition, donc la ca ne serait pas le cas (les valeurs possibles renvoyées par Next sont 0 et 1, et tu as des case pour 0 et  1)

Mx
MVP C# 
Messages postés
15
Date d'inscription
mercredi 12 octobre 2005
Statut
Membre
Dernière intervention
19 juin 2006

OK merci beaucoup

Je crois que je vais lire la doc attentivement au lieu de poser des questions idiotes....
Messages postés
3466
Date d'inscription
lundi 16 octobre 2000
Statut
Modérateur
Dernière intervention
30 octobre 2008
49
C'est pas idiot, mais c'est juste un reflexe a prendre ;)

Mx
MVP C#