2013-12-20 36 views
2

我有一個我想轉換爲Java的C/C++代碼的功能,但由於對該語言的知識知之甚少,我不完全確定它想要做什麼。將代碼片段轉換爲另一種語言不必要= op?

public P unknown(int min1, int max1, int min2, int max2) 
{ 
    this._a = this._a < min1 ? min1 : this._a; 
    this._a = this._a > max1 ? max1 : this._a; 
    this._b = this._b < min2 ? min2 : this._b; 
    this._b = this._b > max2 ? max2 : this._b; 
    return this; 
} 

我想知道就是爲什麼

this._a = this._a 

是不是多餘的? 是否應該在Java中執行以下代碼?

public P unknown(int min1, int max1, int min2, int max2) 
{ 
    this._a < min1 ? this.a = min1 : this.a = this._a; 
    this._a > max1 ? this.a = max1 : this.a = this._a; 
    this._b < min2 ? this.b = min2 : this.b = this._b; 
    this._b > max2 ? this.b = max2 : this.b = this._b; 
    return this; 
} 
+0

最小的細節,但在Java是不是很好用「_」作爲私人領域的一個標記。不尋常的,沒有錯的,但醜陋的。 http://www.oracle.com/technetwork/java/javase/documentation/codeconventions-135099.html –

回答

3

this._a = this._a在任何地方都不會顯示爲完整的語句。該表達式是包含三元運算符的語句的一部分

this._a = this._a < min1 ? min1 : this._a; 

因此該聲明實際上並不重複。

閱讀:The Conditional (or Ternary) Operator (?:)

+0

我認爲你可以強調優先;這將有助於理解語句的含義(區別'?:'和'if') – leemes

1

三元運算符基本上是一個如果構建在一個表達式語句;

if X ? do y : else do z 

this._a = this._a < min1 ? min1 : this._a; 
assign comparison  then else 

順便提一句,您嘗試轉換的方法實際上已經是完全有效的Java,您不需要對它做任何事情!在這種情況下,該方法中的所有內容在兩種語言中都是相同的。

+0

不,它實際上並不是OP的問題。這不是一種表述,而是一種表達。差異至關重要。 – leemes

+0

這是一個if語句(相同的功能)內置到表達式中。如果是OP會熟悉的東西,併爲他們提供背景知識? :確實。 –

1

它不是多餘的,只是格式化的語言。

this._a = (this._a < min1) ? min1 : this._a; 

意味着程序將比較_amin1,分配?如果真或後者,如果假後的第一個值。

你的java片段做同樣的事情

1

我想你不明白三元運算符正確。這不是一個條件性陳述,而是一個有條件的表達式

這不是:

(condition) ? (what to do in case of true) : (what to do otherwise) 

而是

(condition) ? (what the expression evaluates to in case of true) : (what otherw.) 

所以... ? ... : ...部分只有一個這是在你的程序,然後分配給一個變量。

0

這段代碼沒有做this._a = this._a,那會很愚蠢。它使用三元運算符。 這是閱讀的方式,希望對你有意義:

this._a = (this._a < min1 ? min1 : this._a); 
相關問題