2016-09-17 2 views
5

Hier ist der Codeangezeigte Werte von einem privaten int in C#

Ich kann nicht den Grenzwert Zähler erhalten für jedes Mal erhöhen ich es auf 1 zwischen den einzelnen Ausgangsleitung zu zählen bekommen können, aber das ist es Irgendeine Idee warum? Ich will es in der Lage sein, jeden „Überschwinger“

class Actuator 
{ 
    private int limit_count = 0; 

    public int Inc_Limit_counter(int temp,int co2_conc,int rel_humid) 
    { 
     if(temp > 70 || co2_conc > 450 || rel_humid > 77) 
      limit_count++; 

     //Console.WriteLine("test {0}",limit_count); 
     return limit_count; 
    } 

    public int Get_limit_count() 
    { 
     return limit_count; 
    } 
} 


class Program 
{ 
    static int read_random_values() 
    { 
     Random r = new Random(); 
     int temp, co2_conc, rel_humid, i; 

     Console.WriteLine("Temperature in celcius:"); 
     for (i = 0; i <= 100; i++) 
     { 
      temp = r.Next(-50,50); 
      co2_conc = r.Next(300,600); 
      rel_humid = r.Next(0,100); 

      Console.WriteLine("The temperature is: {0}, Co2 concentration is: {1} and Relative Humidity is: {2}",temp,co2_conc,rel_humid); 

      Actuator Counter1 = new Actuator(); 
      Counter1.Inc_Limit_counter(temp, co2_conc, rel_humid);  
     } 

     return 0; 
    } 


    static void Main() 
    { 
     read_random_values(); 
     Actuator object1 = new Actuator(); 
     object1.Get_limit_count(); 
    } 
} 

Antwort

1

Das Problem besteht darin, dass Sie jedes Mal, wenn Sie die Inc-Methode aufrufen, eine neue Instanz der Actuator-Klasse erstellen. So wird Ihr Zähler einmal erhöht und das Objekt wird nicht mehr benutzt. Ich denke du verpasst die statischen Schlüsselwörter für den Zähler und die beiden Methoden der Aktor Klasse.

+0

Danke! das hat es gelöst! – mrcool

+0

@mrcool bitte wählen Sie die Antwort, die Ihr Problem gelöst hat. – Niklas

0

Zuerst zu zählen: Sie haben eine Instanz neue Actuator erstellen In Ihrer Methode Main und seinen Wert zu lesen. Wenn Sie einen neuen Aktor erstellen, wird das Feld limit_count auf 0 initialisiert.

Zweitens: In Ihrer read_random_values-Methode erstellen Sie weiterhin neue Aktoren innerhalb der for-Schleife. Jedes Mal, wenn Sie dies tun, haben Sie einen neuen Aktuator mit einer limit_count von Null.

Drittens: In Ihrer Main-Methode rufen Sie Get_limit_count (object1) auf. Get_limit_count nimmt keinen Parameter und sollte wie dieses Objekt1.Get_limit_count aufgerufen werden.

Versuchen Sie diese Änderungen:

static void Main() 
{ 
    Actuator object1 = new Actuator(); 
    read_random_values(object1); 

    Console.WriteLine("Final limit count: " + object1.Get_limit_count()); //Get_limit_count doesn't take a parameter and is called like this. 
} 

static int read_random_values(Actuator actuator) 
{ 
    Random r = new Random(); 
    int temp, co2_conc, rel_humid, i; 


    Console.WriteLine("Temperature in celcius:"); 
    for (i = 0; i <= 100; i++) 
    { 
    temp = r.Next(-50,50); 
    co2_conc = r.Next(300,600); 
    rel_humid = r.Next(0,100); 



    Console.WriteLine("The temperature is: {0}, Co2 concentration is: {1} and Relative Humidity is: {2}",temp,co2_conc,rel_humid); 

    actuator.Inc_Limit_counter(temp, co2_conc, rel_humid);  

    } 
} 

Als Randbemerkung, sollten Sie in Styleguides suchen Konventionen für die Namensgebung. Typischerweise beginnen in C# -Methoden mit einem Großbuchstaben und jedes neue Wort wird kapitalisiert, z. ReadRandomValues. Nicht read_random_values.

Verwandte Themen