2016-04-29 90 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'爲假,否則可能不是劃分問題。 –