2016-09-17 21 views
5

Oto kodWyświetlanie wartości od prywatnej int w C#

nie mogę dostać licznik graniczną, aby zwiększyć za każdym razem mogę je policzyć na 1 pomiędzy każdym outputline, ale To jest to Każdy pomysł, dlaczego? Chcę, żeby móc liczyć każdy „przeregulowania”

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(); 
    } 
} 

Odpowiedz

1

Problem polega na tym, że za każdym razem, gdy wywołujesz metodę Inc, tworzysz nową instancję klasy Actuator. Tak więc twój licznik zostanie zwiększony jeden raz, a następnie obiekt nie będzie już używany. Myślę, że brakuje ci statycznych Słowa Kluczowego dla licznika i dwóch metod klasy Aktor.

+0

Dzięki! to rozwiązało! – mrcool

+0

@mercool wybierz odpowiedź, która rozwiązała Twój problem. – Niklas

0

pierwszy: w głównym sposobem Państwo utworzyć nową instancję siłownika i odczytać jego wartość. Po utworzeniu nowego elementu wykonawczego pole limit_count zostanie zainicjowane do wartości 0.

Po drugie: W metodzie read_random_values ​​ciągle tworzysz nowe elementy wykonawcze wewnątrz pętli for. Za każdym razem, gdy to robisz, masz nowy Actuator o wartości limit_count wynoszącej zero.

Po trzecie: W swojej głównej metodzie wywołuje się Get_limit_count (object1). Get_limit_count nie przyjmuje parametru i powinno być nazywane tak jak ten obiekt1.Get_limit_count.

Spróbuj tych zmian:

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);  

    } 
} 

Na marginesie, należy rozważyć patrząc w stylu przewodników dla konwencje nazewnictwa. Zazwyczaj w C# metody zaczynają się od dużej litery, a każde nowe słowo jest kapitalizowane, np. ReadRandomValues. Nie odczytaj wartości_docelowych.

Powiązane problemy