0

かなり簡単に動作するはずのものを取得するのに問題があります。私は常に新しい値で配列を更新しています。その際、最小値と最大値のデルタまたは差を取得する必要があります。配列の長さは 10 のままである必要があります。問題は、デルタ配列の最初と最後の値だけが変化しているように見えることです。私は何が欠けていますか?

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
4

2 に答える 2

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; }
于 2013-02-05T21:19:28.550 に答える
0

答えを見つけました。配列を並べ替えてデルタ値を取得する前に、配列を複製する必要がありました

于 2013-02-05T22:05:34.043 に答える