2012-03-13 13 views
0

2つの変数(xSpeedとySpeed)があり、それらがminSpeed以下になると独立してゼロに設定し、両方がゼロのときに終了するという共通の状況があります。&&を実行する最も効率的な方法?

最も効率的な方法は何でしょうか?現在、私は2つのメソッド(方法2はクリーナーを)持っていますが、あなたたちはより良い方法を知っていた場合、私は思っていた....

あなたが行うことができます

Method1:

bool isZeroX = Math.abs(xSpeed)< minSpeed; 
bool isZeroY = Math.abs(ySpeed)< minSpeed; 

if(isZeroX && isZeroY) return -1; 
else if(isZeroX) xSpeed = 0; 
else if(isZeroY) ySpeed = 0; 

Method2:

if(Math.abs(xSpeed)< minSpeed) xSpeed = 0; 
if(Math.abs(ySpeed)< minSpeed) ySpeed = 0; 
if(ySpeed==0 && xSpeed==0) return -1; 

答えて

2

if(-minSpread < xSpeed && xSpeed < minSpeed) { 
    xSpeed = 0; 
    if(-minSpread < ySpeed && ySpeed < minSpeed) { 
     ySpeed = 0; 
     return -1; 
    } 
} else if(-minSpread < ySpeed && ySpeed < minSpeed) { 
    ySpeed = 0; 
} 
+0

!天才!しかし、なぜ私は-minSpreadが必要ですか? Math.absを使用しているのが遅いですか? – tetris11

+0

'Math.abs(int)'は、このコードの中で最も高価な部分であるブランチになります。全体的に、ブランチの数が削減されます。 '-minSpread

3

2番目の例は、最も読みやすいので、2番目の例が好きです。あなたが最適化すべきことを証明できなければ、効率よりも読みやすさを優先してください。

+0

ちょっとありがとう - しかし、その小さなアプリでは、コードを読んでいる唯一の人になるだろう。私が理解している限り、効率性が優先されるべきです。 – tetris11

+5

同意しない。あなただけが作業しているプロジェクトであっても、このレベルのマイクロ最適化を行うことはJITの仕事です。 –

+1

@LouisWasserman私は同意します。 "私はそれを理解する"は、 "私は6ヶ月後にそれを全く考えないで簡単に理解する"べきである。 –

1

はおそらく、オブジェクトが動いているかどうかを確認するために、エレガントなブールメソッドを作る/停止:もちろん

boolean isStopped() { 
    if(Math.abs(xSpeed)< minSpeed) xSpeed = 0; 
    if(Math.abs(ySpeed)< minSpeed) ySpeed = 0; 

    return (ySpeed==0 && xSpeed==0); 
} 
関連する問題