基本上,我的代码中有以下笨重的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
等...然后在for
循环中循环遍历这些变量,该循环具有if
语句嵌入其中?
答案 0 :(得分:0)
这样做完全没问题,尽管循环也可以。取决于你的“高效”的想法。较小的代码更有效吗?少写或少说明。对于第一个标准,循环会更有效。对于第二个,这也适用。但是,每条指令的指令,这是一种非常有效的方法。
答案 1 :(得分:0)
您可以使用辅助例程来减少代码:
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.
我的眼睛很干净。
至于你的循环,是的,那会起作用,但它意味着将值复制到数组中,然后循环遍历它们的开销,这会分散你对它们所做的事情。这几乎就像机器人在看到正在发生的事情。只是我的意见。
玩得开心!