2011-11-02 6 views
1

私は理解しようとしているプログラムがありますが、わかりにくい略語やコードがあります。 ? コードは、私はプログラミングの本で読ん簡体字の単語形

double xDistance = x1 - x2 >= 0 ? x1 - x2 : x2 - x1; 
    double yDistance = y1 - y2 >= 0 ? y1 - y2 : y2 - y1; 

次のとおりです。の省略形であるならば...その後、私は毎回私が挿入するためにこれらの単語を置くか、私は構文エラーを取得するいくつかのコードを置き換え行う場所。

また、コード

好ましくは、所与の任意の援助のために予め

おかげ& &オペレータを交換

(xDistance <= (w1 + w2)/2 && yDistance <= (h1 + h2)/2) 

の次の行を書き込むが複数の方法です。

答えて

5

条件演算子? :if-elseの短縮形であり、ように動作する:

if (x1 - x2 >= 0) 
    xDistance = x1 - x2; 
else 
    xDistance = x2 - x1; 

(condition) ? (return this if condition true) : (return this if condition false) 


したがって

double xDistance = x1 - x2 >= 0 ? x1 - x2 : x2 - x1; 

はに等しいです


二行目:

絶対値(すなわちを記憶している
if (y1 - y2 >= 0) 
    yDistance = y1 - y2; 
else 
    yDistance = y2 - y1; 


double yDistance = y1 - y2 >= 0 ? y1 - y2 : y2 - y1; 

は同じことであるが、に相当します。距離ではなく距離)をxDistanceyDistanceに設定します。 Math.abs(x1 - x2)などと置き換えることもできます。


なぜ、&&演算子を次のように置き換えますか?

if (xDistance <= (w1 + w2)/2) 
    if (yDistance <= (h1 + h2)/2) 
     // do something 

EDIT:コメントでDavidで述べたように、&&

(xDistance <= (w1 + w2)/2 && yDistance <= (h1 + h2)/2) 

あなたが本当にしなければならなかった場合は、持っている可能性があり(この文を想定しif声明に属します)単に論理とANDです。すなわち、 X && Yの場合、XがTRUEで、YがTRUEの場合、TRUEになります。

このため、あなたはを活用することができ短絡最初の条件(X)がFALSEであれば、2番目の評価プログラムにはポイントがありませんを、(Y)式がTRUEになることはありませんので、 。

+0

"&&演算子を置き換える理由は何ですか?" '&&'演算子は論理和と論理和です。ブール論理を理解していると、(xDistance <=((w1 + w2)/ 2)) '_and_'(yDistance <=((h1 + h2)/ 2))'は、結果は真実です。どちらかがfalseの場合、文全体がfalseとみなされます。おそらく '&& 'の代わりに' &&'の使用について知っておくべき重要なことは、 '&&' "short-circuits"です。つまり、最初の文が偽であれば、2番目の文はまったく評価されません。 –

+0

@ DavidBrainer-Bankerええ、それは良い説明です。 – AusCBloke

+0

このような迅速な返信をいただき、ありがとうございました。 – Calsolum

関連する問題