基本上,我在代码中放置了以下笨重的if语句集,用于将任何错误的传感器读数设置为零。
if (soil_moisture > 150 || soil_moisture <-100){
soil_moisture = 0;
}
if (soil_temperature > 150 || soil_temperature < -100 ){
soil_temperature = 0;
}
if (ambient_temperature > 150 || ambient_temperature < -100 ){
ambient_temperature = 0;
}
if (ambient_humidity > 150 || ambient_humidity <-100){
ambient_humidity = 0;
}它的编写方式似乎是多余和低效的,我想知道,是否有更好的方法来做到这一点。是否可以创建变量soil_temperature、soil_moisture等的数组...然后在嵌入了if语句的for循环中遍历这些变量?
发布于 2017-10-29 07:50:08
这样做是非常好的,尽管循环也可以。这取决于你对“高效”的看法。代码越小效率越高吗?更少的编写或更少的指令。对于第一个标准,循环的效率要高得多。对于第二种情况,这也是正确的。虽然,这是一种非常有效的方法。
发布于 2017-10-30 08:21:53
您可以使用助手例程来裁剪代码:
boolean outOfBounds(int value, int low, int high)
{
if ( value < low || value > high )
return true;
else
return false;
}然后在你的代码中..。
if ( outOfBounds(soil_moisture, -100, 150) ) {
soil_moisture = 0;
}
if ( outOfBounds(soil_temperature, -100, 150) ) {
soil_temperature = 0;
}
// etc.如果您的限制总是-100和150,那么您可以传递一个指向变量的指针,并在例程中将其设置为零:
void resetBounds(int *pvar)
{
if ( *pvar < -100 || *pvar > 150 ) {
*pvar = 0;
}
}在你的代码中:
resetBounds(&soil_moisture);
resetBounds(&soil_temperature);
// etc.我的眼睛看起来很干净。
至于你的循环,是的,这是可行的,但它意味着将值复制到数组中,然后循环它们的开销,这会分散你对它们所做的事情的注意力。这几乎就像是机械论阻碍了人们对正在发生的事情的看法。这只是我的观点。
玩得开心!
https://stackoverflow.com/questions/46994087
复制相似问题