2016-04-29 137 views
-1

我有一种方法可以从包含训练数据的文件中计算出间隔。它检测到峰值和下降的功率来确定时间间隔,我正在开发一种方法来计算每个时间间隔的平均值。这里是方法:通过for循环累加总数 - 总是总是为0

public void getIntervalData() 
     { 
      //Remove first drop anomaly 
      drops.Remove(0);   
      int intervalAltitude; 
      int intervalPower; 
      int intervalSpeed; 
      int altitudeAddUp = 0; 
      int powerAddUp = 0; 
      int speedAddUp = 0; 
      int counter = 0; 
      //Loop through to get all spikes and drops 
      for (int j = 0; j < spikes.Count(); j++) 
      {     
       int firstNumber = Convert.ToInt32(spikes[j]); 
       int secondNumber = Convert.ToInt32(drops[j]); 
       MessageBox.Show(firstNumber.ToString()); 
       counter++; 
       //Difference to work out averages 
       int difference = secondNumber - firstNumber;  
       //Get seperate interval data (first number = spike, second number = drop) 
       for (int i = firstNumber; i < secondNumber; i++) 
       {      
        int altitudeNumber = altitudeList[i]; 
        int powerNumber = powerList[i]; 
        int speedNumber = Convert.ToInt32(speedList[i]);     
        //Add up data 
        altitudeAddUp += altitudeNumber;  
        powerAddUp += powerNumber; 
        speedAddUp += speedNumber;      
       } 
       MessageBox.Show("Alt add up:" + altitudeAddUp.ToString()); 
       intervalAltitude = altitudeAddUp/difference; 
       intervalPower = powerAddUp/difference; 
       intervalSpeed = speedAddUp/difference; 
       intervalAverages.Add(new Tuple<int, int, int>(intervalAltitude, intervalPower, intervalSpeed)); 
       MessageBox.Show("Interval: " + counter.ToString() + ": Avgs: " + intervalAverages[0]); 
      } 
      MessageBox.Show("Interval averages added. There were: " + counter + " intervals"); 
     } 

altitudeAddUp,powerAddUp和speedAddUp总是0,但我不明白为什么它没有加起来。可能是一个菜鸟错误,我只是无法看到它。

我以前用过一个消息框来测试altitudeNumber,powerNumber和speedNumber是否包含数据并且它们是这样做的,但它不会加起来。

+1

由于它们是整数,所以在这一行有'intervalSpeed = speedAddUp/difference; '或另一个类似的你正在分割并创建一个十进制,它被取整为0. –

+2

你确定'firstNumber

+0

正如上面的评论所暗示的,如果第二个数字<第一个数字,那么您将永远不会输入第二个用于循环的地方,而您正在使用debuger进行入侵 – cameronjchurch

回答

1

我认为问题是你所有的变量都是整数。并且整数没有任何小数精度,这意味着如果间隔为0.999,则实际整数值为0(0.999不以整数存在,在调用ToInt32时该值被截断)。

使用float,doubledecimal,取决于精度和范围的需要。

+0

根据OP,问题不是'intervalXY',而是'xyAddUp'变量 –

+0

这些值是从'spike [j]'中读取的,它们完成了'ToInt32'。这也可以产生'0'。 –

+0

正确 - 除非语句'altitudeAddUp,powerAddUp和speedAddUp始终为0'为假,否则可能不是划分问题。 –