在 C# 中显示来自私有 int 的值
Displaying values from a private int in c#
这是代码
我无法让限制计数器每次都递增
我可以让它在每个输出线之间计数为 1,但仅此而已
知道为什么吗?
我希望它能够计算每个 "overshoot"
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();
}
}
首先:在您的 Main 方法中,您创建了一个新的 Actuator 实例并读取它的值。当您创建一个新的 Actuator 时,limit_count 字段将被初始化为 0。
其次:在您的 read_random_values 方法中,您不断在 for 循环内创建新的执行器。每次执行此操作时,您都会得到一个 limit_count 为零的新执行器。
第三:在您的 Main 方法中,您正在调用 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# 中,方法以大写字母开头,每个新词都大写,例如读取随机值。不是 read_random_values.
问题是每次调用 Inc 方法时都会创建执行器的新实例 class。因此,您的计数器将增加一次,然后不再使用该对象。我认为您缺少计数器的静态关键字和执行器的两种方法 class。
这是代码
我无法让限制计数器每次都递增 我可以让它在每个输出线之间计数为 1,但仅此而已 知道为什么吗? 我希望它能够计算每个 "overshoot"
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();
}
}
首先:在您的 Main 方法中,您创建了一个新的 Actuator 实例并读取它的值。当您创建一个新的 Actuator 时,limit_count 字段将被初始化为 0。
其次:在您的 read_random_values 方法中,您不断在 for 循环内创建新的执行器。每次执行此操作时,您都会得到一个 limit_count 为零的新执行器。
第三:在您的 Main 方法中,您正在调用 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# 中,方法以大写字母开头,每个新词都大写,例如读取随机值。不是 read_random_values.
问题是每次调用 Inc 方法时都会创建执行器的新实例 class。因此,您的计数器将增加一次,然后不再使用该对象。我认为您缺少计数器的静态关键字和执行器的两种方法 class。