-1

連続する入力値の差を見つけて、最大の変化を返します。私の主な問題は、使用する正しい演算子を見つけることです (私は思います)。また、負の値でも動作するようにしたかった..

if(count > 0){
      change = Math.abs(temp) - Math.abs(temp2);
      UI.println(change);
      if(Math.abs(change) > Math.abs(bigChange)){
           bigChange = Math.abs(change);
      }
}
4

3 に答える 3

1

あなたの腹筋の使い方は間違っています。temp が -1 で temp2 が 1 の場合を考えてみましょう。これらの値の差は 2 ですが、ルーチンでは 0 として計算されます。

試す:

if(count > 0) {
  change = Math.abs(temp - temp2);
  UI.println(change);
  if( change > bigChange ) {
    bigChange = change;
  }
}
于 2013-04-09T10:08:45.377 に答える
0

間の変化を見つけたい場合は、使用する必要があります

change = Math.abs(temp- temp2);

それ以外の

 change = Math.abs(temp) - Math.abs(temp2);

また、変数を初期化する必要があります

bigChange=0 

さらに、変数の変更と bigChange は常に 0 より大きいため、Math.abs メソッドの再呼び出しを回避できます。

if(change > bigChange)
      {
          bigChange = change;
      }

も正しいです。

于 2013-04-09T10:11:56.727 に答える
0

それはかなり単純なはずです:

int diff = temp - temp2;
max = Math.max(maxDifference, Math.abs(diff));
println(max).

他に要件はありますか?Math.max と Math.min は非常に最適化されており、比較を自分で行うのと同じくらい高速です。しかもワンライナーです。Math.max vs (a > b ? a : b) については、この回答も参照してください。

Math.max(a,b) または (a>b)?a:b は Java で高速ですか?

于 2013-04-09T10:12:26.810 に答える