2013-02-05 25 views
0

遇到問題應該相當簡單。 我不斷用新值更新數組,因此我需要獲取最低值和最高值之間的差值或差值。數組的長度應保持恆定爲10. 問題是隻有我的delta數組的第一個和最後一個值似乎發生了變化。我錯過了什麼?從不斷更新的數組中獲取數組值的增量

雖然在AS3,應該是幾乎相同的使用Java或Javascript

private var _deltaArray:Array= new Array(); 

private function update(myVal:int):void{ 
    if (_deltaArray.length < 10) { 
     _deltaArray.push(myVal); 
    } 

if (_deltaArray.length >= 10) { 
    _deltaArray.push(myVal); 
    var delta:int =getDelta(_deltaArray); 
    _deltaArray.shift(); 
} 
}//end func 

private function getDelta(a:Array):int { 
     var total:Number=0; 
     var L:int=a.length 
     if (L > 1) { 

      a.sort(Array.NUMERIC); 


      var delta:int=int(a[0]) - int(a[L - 1]); 
      trace('getDelta delta= ' + delta); 
     } 
     return delta; 
}//end func 
+0

我不太清楚你的意思是你的問題,但它看起來很奇怪,你排序數組,然後'轉移'它。 'Array.sort()'會修改原始數組,所以你總是刪除最小的值。那是故意的嗎? –

回答

0

找到了答案。 我需要克隆我的數組之前排序它來檢索德爾塔值

0

這只是一個建議,但爲什麼不能讓你增量的運行計數?我只能在僞碼中編碼,但是:

private double max = Double.MIN; 
private double min = Double.MAX; 

private void update(integer value) { 
    array.push(value); 
    max = value > max ? value : max; 
    min = value < min ? value : min; 
    if (array.length > 10) { 
     array.shift(); 
    } 
} 

private int delta() { return max - min; }