2016-09-17 7 views
5

Вот кодОтображение значений из частной междунар в C#

я не могу получить счетчик лимита приращения каждый раз я могу заставить его считать до 1 между каждым outputline, но Вот именно Любая идея почему? Я хочу, чтобы иметь возможность рассчитывать каждый «перерегулирование»

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

ответ

1

Проблема в том, что вы создаете новый экземпляр класса Actuator каждый раз, когда вы вызываете метод Inc. Таким образом, ваш счетчик будет увеличен один раз, а затем объект больше не будет использоваться. Я думаю, что вам не хватает статических ключевых слов для счетчика и двух методов класса Actuator.

+0

Спасибо! что это решило! – mrcool

+0

@mrcool, пожалуйста, выберите ответ, который решил вашу проблему. – Niklas

0

Во-первых: в главном методе вы создаете новый экземпляр исполнительного механизма и прочитать его значение. Когда вы создадите новый Actuator, поле limit_count будет инициализировано на 0.

Вторым: в вашем методе read_random_values ​​вы продолжаете создавать новые приводы внутри цикла for. Каждый раз, когда вы это делаете, у вас есть новый Actuator с лимитом limit_count.

В-третьих: В вашем основном методе вы вызываете Get_limit_count (object1). Get_limit_count не принимает параметр и должен вызываться как этот object1.Get_limit_count.

Попробуйте эти изменения:

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

    } 
} 

В качестве примечания, рассмотреть глядя в направляющих стиля для именования. Обычно в методах C# начинается с заглавной буквы, и каждое новое слово capitilized, например. ReadRandomValues. Не read_random_values.

 Смежные вопросы

  • Нет связанных вопросов^_^