2011-11-02 66 views
1

我有一個程序,我試圖瞭解,但有一個縮寫代碼或代碼,我不明白。 代碼縮寫代碼的字形式

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

我在編程書籍閱讀:是的縮寫形式的if ... then但我在哪裏把這些話,因爲每次我插入或更換一些代碼,我得到一個語法錯誤。

而且在那裏寫入的代碼

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

優選取代& &操作者

感謝下列線預先給定的任何幫助的方法不止一種。

回答

5

條件運算符? :if-else速記和工作像這樣:

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


因此

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

等同於:

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


第二行:

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

是一樣的東西,等同於:

if (y1 - y2 >= 0) 
    yDistance = y1 - y2; 
else 
    yDistance = y2 - y1; 


,其存儲所述絕對值(即。距離而不是位移)在xDistanceyDistance。也可以用Math.abs(x1 - x2)等代替


爲什麼你想在下面替換&&運算符?

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

如果你真正到了你可以有(假設這種說法屬於在if聲明):

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

編輯:正如在評論中提到由David&&簡直就是邏輯 AND。即。對於X && Y,如果X爲TRUE且Y爲TRUE,則表達式爲TRUE。

因此可以利用短路,其中如果所述第一條件(X)爲FALSE,則有在程序中沒有點評估第二(Y)因爲表達永遠不能TRUE 。

+0

爲了跟進這個問題,「爲什麼你要替換&&操作符??」 '&&'運算符是一個邏輯和。如果你理解布爾邏輯,這就意味着爲了使(xDistance <=((w1 + w2)/ 2))和_(yDistance <=((h1 + h2)/ 2))'結果是真實的。如果任何一個都是錯誤的,則整個陳述被認爲是錯誤的或許你應該知道使用'&&'代替'&'最重要的是'&&''短路「 - 這意味着如果第一條語句是錯誤的,那麼第二條語句根本就不會被評估。 –

+0

@ DavidBrainer-銀行家是的,這是一個很好的解釋。 – AusCBloke

+0

非常感謝這麼快速的回覆非常有幫助和準確 – Calsolum