索引数组索引问题

时间:2013-12-12 03:03:55

标签: c++ arrays indexing arduino

我填写的代码大小为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);
}

2 个答案:

答案 0 :(得分:0)

您应该将hottest初始化为小于数组中任何温度的值。原因是如果最热的温度在索引0中,那么当if(temperaturearray[i] > hottest)i并且0将不会更新时,currentlargestindex将不会为真。

我建议使用FLT_MINstd::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];
}