2012-09-15 36 views
0

有人可以在下面的代碼中解釋問號嗎? INITIAL_PERMANCE也是代碼中的靜態最終常量,但是synatax的最後一行是什麼?java代碼中的問號

Synapse(AbstractCell inputSource, float permanence) { 
    _inputSource = inputSource; 
    _permanence = permanence==0.0 ? 
     INITIAL_PERMANENCE : (float)Math.min(1.0,permanence); 
} 
+1

查找Java三元運算符。 –

+1

我一直覺得[Oracle的Java教程](http://docs.oracle.com/javase/tutorial/java/nutsandbolts/opsummary.html)實際上_does_稱這個三元運算符爲愚蠢。太蹩腳了。它應該被稱爲條件操作符,它只是_happens_是一個三元操作符(三操作符)。 –

+0

@射線:同意。但是,我們有三元運算符。 –

回答

9

The?和:是Java條件運算符的一部分。有時稱爲三元運算符,因爲它是Java中唯一接受3個參數的運算符。

這實質上是一個內聯IF/THEN/ELSE塊。

_permanence = permanence==0.0 ? 
    INITIAL_PERMANENCE : (float)Math.min(1.0,permanence); 

可以重寫如下:

if (permanence == 0.0) 
    _permanence = INITIAL_PERMANENCE; 
else 
    _permanence = (float) Math.min(1.0,permanence); 

條件運算符的一般形式是

<Test returning a boolean> ? <value for if test is true> : <value for if test is false> 
0

這等於一如果一個內聯manner.Equivalent else語句

_permanence = 
    {// A kind of anonymous routine for assignment 
     if(permanence==0.0) 
     { INITIAL_PERMANENCE } 
     else 
     { (float)Math.min(1.0,permanence)} 
    } 

一個很好的解釋是在Oracle的網站約ternary operators

+0

該死,打我吧! –

+1

@Jon:你是唯一擁有正確語法和邏輯的人。太糟糕了,它在我點擊upvote的那一刻被刪除了。 – BalusC

+1

由於此代碼實際上是不正確的,所以向下投票。你將布爾值(永久性== 0.0)分配給_permanence,if這兩個塊都不做任何事情。 – EdC

0

這是ternary operator.它是這樣工作的if-else語句。

分解,聲明與此類似:

if(permanence == 0.0) { 
    _permanence = INITIAL_PERMANENCE; 
} else { 
    _permanence = (float)Math.min(1.0,permanence); 
} 

它的使用在其中的含義是很清楚的情況下,有限的。三元運營商可能會混淆,所以請謹慎使用它們。

最後一條語句:

(float)Math.min(1.0, permanence) 

被稱爲類型轉換。您將Math.min()的結果投射到浮點數上,結果返回一個double。您必須詳細閱讀floating point numbers are才能看到做到這一點的價值。

+0

我真的很想知道我爲什麼被低估了...... – Makoto

+0

你最初的代碼示例的邏輯錯了。毫無疑問,真的。 – BalusC

+0

你錯過了if語句的else塊中的_permanence ='。另外,僅僅爲了pedantry的緣故,正確的名字是條件運算符。它恰好是java中唯一的三元運算符,因爲沒有其他運算符需要三個參數。 – EdC

0

它調用的Java三元運算符(如氣墊船說的),並且使用像這樣:

type variableName = (statement) ? value if statement is true: value if false; 
0

這是最常用的方式。
[可選變量] =(布爾測試)? (如果爲True,則執行此操作):(如果爲false,則執行此操作)