我填写的代码大小为5,其中包含5个不同的值(代码未显示)。然后它使用相应的数字(底部函数)填充数组中的每个索引。然后它保存先前的最大索引(最初从0开始)。然后它在数组中搜索最大值,保存该值以及找到它的索引。
然而,当我多次运行它时,它永远不会给我当前的索引值0.它总是在一个。例如。我第一次运行它,前一个最大的索引是0,当前索引是1(这是正确的)。然后,当我再次运行它时,第一个值是最大的。之前的最大指数为1(正确),但当前指数值也为1.(应为0)。
有人能发现我的代码有什么问题吗?
float highestTemperature(float temperaturearray[])
{
int arraylength = 5; //knows how large the array is
hottest = temperaturearray[0];
previouslargestindex = currentlargestindex;
Serial.print("previous largest index = ");
Serial.println(previouslargestindex);
for(int i = 0; i < arraylength; i++) //loops through the array
{
if(temperaturearray[i] > hottest)
{
hottest = temperaturearray[i];
currentlargestindex = i;
} //end if statement
} //end for loop
Serial.print("current largest index = ");
Serial.println(currentlargestindex);
}
float fillarray(float temperaturearray[])
{
sensors.requestTemperatures();
temperaturearray[0] = sensors.getTempC(Probe01);
temperaturearray[1] = sensors.getTempC(Probe02);
temperaturearray[2] = sensors.getTempC(Probe03);
temperaturearray[3] = sensors.getTempC(Probe04);
temperaturearray[4] = sensors.getTempC(Probe05);
}
答案 0 :(得分:0)
您应该将hottest
初始化为小于数组中任何温度的值。原因是如果最热的温度在索引0中,那么当if(temperaturearray[i] > hottest)
为i
并且0
将不会更新时,currentlargestindex
将不会为真。
我建议使用FLT_MIN
或std::numeric_limits<float>::min()
,但您认识的任何值都会更小。
您也可以尝试if(temperaturearray[i] >= hottest)
,但浮点相等可能很复杂。如果按照所示的方式分配值,则应该没问题。
答案 1 :(得分:0)
您的失败是初始化currentlargestindex
。
正如您hottest = temperaturearray[0];
所做的那样,您也应该currentlargestindex=0;
。
但是,您的代码可以进一步改进:
float highestTemperature(float temperaturearray[]) {
int arraylength = 5; //knows how large the array is
int currentlargestindex = 0; //Assume first item is hottest one
for(int i = 1; i < arraylength; i++) {//Don't need to check 0 again, check just 1, ...!
if(temperaturearray[i] > temperaturearray[currentlargestindex]) {
currentlargestindex = i;
//hottest=temperaturearray[i]; //Not needed, same as temperaturearray[currentlargestindex]
}
}
//This is a float returning function, so return it!
return temperaturearray[currentlargestindex];
}