Problème de modification de variable C#

Problème de modification de variable C# - C#/.NET managed - Programmation

Marsh Posté le 09-02-2008 à 04:44:34    

Bonjour à tous,  
     j'ai un petit souci avec un programme que j'essaye de mettre en place. J'ai créer un simulateur d'heure, et j'y ai intégré trois petites méthodes lesquelles servent respectivement à :
 
 1. Afficher l'heure qu'il est, et si il est midi ou minuit.
 2. Afficher la durée de vie de l'espèce A (les animaux).
 3. Afficher la durée de vie de l'espèce B (les hommes).
 
Au fil du temps, la durée de vie de chaque espèce doit diminuer d'elle même. Pour cela j'utilise une variable dva (durée de vie a) et une variable dvb (durée de vie b) qui se décrémentent au fil du temps. Mon problème est que je fixe un instant précis de l'heure à laquelle la décrémentation doit se faire, une fois la bonne heure affichée, la durée de vie se décrémente bien, mais une fois l'heure passée, les variables se remettent à leur valeur par défaut, et donc l'espèce ne vieilli jamais.
Voici donc mon extrait de code, pour vous permettre de déceler l'erreur ou bien me dire ce que je devrait changer ou ajouter.
 
 

Code :
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace Vieillesse
  6. {
  7.     public class Programme
  8.     {
  9.         public static void Main(string[] args)
  10.         {
  11.             int ss;
  12.             int s;
  13.             int mm;
  14.             int m;
  15.             int hh;
  16.             int h;
  17.             int dbg;
  18.             for (s = 0, ss = 0, m = 0, mm = 0, h = 0, hh = 0, dbg = 0; ss != 10; )
  19.             {
  20.                 ss++;
  21.                 if (ss > 9) s++; // passe à s
  22.                 if (ss > 9) ss = 0; // remet ss à zéro
  23.                 if (s > 5) mm++; // passe à mm
  24.                 if (s > 5) s = 0; // remet s à zéro
  25.                 if (mm > 9) m++; // passe à m
  26.                 if (mm > 9) mm = 0; // remet mm à zéro
  27.                 if (m > 5) hh++; // passe à hh
  28.                 if (m > 5) m = 0; // remet m à zéro
  29.                 if (hh > 9) h++; // passe à h
  30.                 if (hh > 9) hh = 0; //remet hh à zéro
  31.                 if (h == 2 & hh == 4) dbg++;  // incrémente dbg
  32.                 if (h == 2 & hh == 4) s = 0;  // *
  33.                 if (h == 2 & hh == 4) ss = 0; // *
  34.                 if (h == 2 & hh == 4) m = 0;  // * remet les compteurs à zéro  
  35.                 if (h == 2 & hh == 4) mm = 0; // *
  36.                 if (h == 2 & hh == 4) h = 0;  //
  37.                 if (dbg == 1) hh = 0; // remet le compteur hh à zéro
  38.                 if (h == 0 & hh == 0 & s == 0 & ss == 0 & m == 0 & mm == 0) dbg--; // remet dbg à sa valeur initiale
  39.                 Heure.Temps(h, hh, m, mm, s, ss);
  40.                 Vie.ageA(h,hh,m,mm,s,ss);
  41.                 Vie.ageB(h,hh,m,mm,s,ss);
  42.             }
  43.         }
  44.     }
  45.     class Heure
  46.     {
  47.         public static void Temps(int h, int hh, int m, int mm, int s, int ss)
  48.         {
  49.             string jour = "Il est midi";
  50.             string nuit = "Il est minuit";
  51.             if (h == 1 & hh == 2 & ss == 1 & s == 0 & m == 0 & mm == 0) Console.WriteLine(jour);
  52.             if (h == 1 & hh == 2 & ss == 1 & s == 0 & m == 0 & mm == 0) System.Threading.Thread.Sleep(5000);
  53.             if (h == 0 & hh == 0 & s == 0 & ss == 0 & m == 0 & mm == 0) Console.WriteLine(nuit);
  54.             if (h == 0 & hh == 0 & s == 0 & ss == 0 & m == 0 & mm == 0) System.Threading.Thread.Sleep(5000);
  55.             Console.WriteLine("Il est " + h + hh + ":" + m + mm + ":" + s + ss);
  56.             System.Threading.Thread.Sleep(1);
  57.             Console.Clear();
  58.         }
  59.     }
  60.         class Vie
  61.         {
  62.             public static void ageA(int h, int hh, int m, int mm, int s, int ss)
  63.             {
  64.                 int dva = 10;
  65.                 if (dva != 0 & hh == 1) dva -= 2;
  66.                 if (dva != 0) Console.WriteLine("il reste " + dva / 2 + " jours de survie à l'animal" );
  67.                 if (dva == 0) Console.WriteLine(" L'animal est mort" );
  68.             }
  69.             public static void ageB(int h, int hh, int m, int mm, int s, int ss)
  70.             {
  71.                 int dvb = 30;
  72.                 if (dvb != 0 & hh == 1) dvb -= 2;
  73.                 if (dvb != 0) Console.WriteLine("il reste " + dvb / 2 + " jours de survie à l'homme" );
  74.                 if (dvb == 0) Console.WriteLine(" L'homme est mort" );
  75.             }
  76.         }
  77.     }


 
Voici aussi un lien vers le programme compilé, que vous puissiez vous faire une idée visuelle du problème qui est engendré.
 
http://www.megaupload.com/?d=TCLYXV9W
 
Merci de vos réponses, j'espères que vous pourrais me sortir de cette impasse ( je suis encore débutant, j'ai tout essayé).

Reply

Marsh Posté le 09-02-2008 à 04:44:34   

Reply

Marsh Posté le 09-02-2008 à 20:31:27    

up !

Reply

Marsh Posté le 09-02-2008 à 21:01:04    

tu parles bien des variables dva et dvb qui se réinitialise.  
 
Si c'est le cas, il s'agit de variables local à la méthode ageA et ageB.
Si tu veux conserver l'état, faut les mettres en variables static de la classes.  
 
Si ce n'est pas de ces variables que tu parles, peux tu me dire exactement quelles varaibles sont réinitialisées?
 
 

Code :
  1. public class Vie
  2.         {
  3.             private static int dva = 10;
  4.             private static int dvb = 30;
  5.             public static void ageA(int h, int hh, int m, int mm, int s, int ss)
  6.             {
  7.                 if (dva != 0 & hh == 1) dva -= 2;
  8.                 if (dva != 0) Console.WriteLine("il reste " + dva / 2 + " jours de survie à l'animal" );
  9.                 if (dva == 0) Console.WriteLine(" L'animal est mort" );
  10.             }
  11.             public static void ageB(int h, int hh, int m, int mm, int s, int ss)
  12.             {
  13.                 if (dvb != 0 & hh == 1) dvb -= 2;
  14.                 if (dvb != 0) Console.WriteLine("il reste " + dvb / 2 + " jours de survie à l'homme" );
  15.                 if (dvb == 0) Console.WriteLine(" L'homme est mort" );
  16.             }
  17.         }


 
Je crois que ta classe Vie devrait plutot être comme ceci, sinon tu ne passeras jamais dans tes conditions car avant dva et dvb valait toujours la valeur de départ


Message édité par moi23372 le 09-02-2008 à 21:03:48
Reply

Marsh Posté le 10-02-2008 à 10:05:29    

Oui tu as bien cerné le problème merci. Ce que tu m'as donné à l'air plutôt juste. Je l'essaye et je te donne des nouvelles. Merci

 

Edit : Bon le problème cette fois-ci est tout autre, je savais bien qu'il allait apparaître. Donc la décrémentation se fait trop vite. Les valeurs dva et dvb conservent bien leur nouvelle valeur à chaque fois, le problème c'est que ma condition de décrémentation n'est pas bonne.

 
Code :
  1. if (dva != 0 & hh == 1) dva -= 2;
  2. if (dvb != 0 & hh == 1) dvb -= 2;
 

Ainsi chaque fois que l'heure passe à 01:00:00 , hh devient égal à 1, et donc, comme l'appel de la méthode de calcul de dva et dvb sont inclusent dans la boucle, les valeurs se décrémente de deux pour chaque nouvelle seconde car hh reste égal à 1. Hors je souhaiterais que la décrémentation se fasse toutes les heures.
Existe t'il un mot clef qui permette de dire :  

Code :
  1. Si dva != 0 et q'une heure est passé, alors dva -=2


Ou peut être un mot clef du genre :

Code :
  1. When (hh=1 & dva != 0) dva -=2;

 ??

Message cité 1 fois
Message édité par Durst1805 le 10-02-2008 à 10:24:07
Reply

Marsh Posté le 11-02-2008 à 12:06:29    

Durst1805 a écrit :

Code :
  1. Si dva != 0 et q'une heure est passé, alors dva -=2




 
Tu veut une décrémentation toutes les heures ou a 1h précise ?
 
Pour toutes les heures :

Code :
  1. SI (dva != 0 ET minute = 0 ET seconde = 0) ALORS decrementation


 
A 1h précise :

Code :
  1. SI (dva != 0 ET heure = 1 ET minute = 0 ET seconde = 0) ALORS decrementation


 


---------------
How can I save my little boy from Oppenheimer's deadly toy ? There is no monopoly of common sense on either side of the political fence
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed