Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1566 connectés 

  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Problème de modification de variable C#

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème de modification de variable C#

n°1684330
Durst1805
Posté le 09-02-2008 à 04:44:34  profilanswer
 

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é).

mood
Publicité
Posté le 09-02-2008 à 04:44:34  profilanswer
 

n°1684452
Durst1805
Posté le 09-02-2008 à 20:31:27  profilanswer
 

up !

n°1684463
moi23372
Posté le 09-02-2008 à 21:01:04  profilanswer
 

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
n°1684526
Durst1805
Posté le 10-02-2008 à 10:05:29  profilanswer
 

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
n°1684790
bpoujol
Posté le 11-02-2008 à 12:06:29  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C#/.NET managed

  Problème de modification de variable C#

 

Sujets relatifs
Formulaire : Récupérer valeur d'un input dont le nom est variableproblème avec DeleteCharAt
Problème avec l'auto-resize d'une image dans operaSQLserver : probleme avec le format datetime
Probleme et optimisation de requeteProbleme boucle For getURL capricieuse
Probleme chargement de page et Javascript sous FirefoxProbleme avec Dreamweaver
Probleme WebspellProblème avec les frames dans Dreamweaver
Plus de sujets relatifs à : Problème de modification de variable C#


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR