2013-07-25 100 views
-4

我想爲012語句使用簡寫。如果在一行處發表聲明,我該如何寫?以及如何比較他們?知道這裏有同樣的問題。但我的聲明沒有其他所以我沒有別的聲明無法做到這一點。如果聲明簡稱爲

public int compareTo(Uyum u) { 
      if (uyum < u.uyum) 
       return -1; 
      if (uyum > u.uyum) 
       return 1; 
      return 0; 
     } 
+0

重複:http://stackoverflow.com/questions/8898590/short-form-for-java-if-statement –

+2

使用三元運算。 – JNL

+1

'return uyum u.uyum? 1:0;' –

回答

4

您可以使用三元運算符:

return uyum < u.uyum ? -1 
     : uyum > u.uyum ? 1 
     : 0; 
+1

對不起,你的代碼搞亂了,但我只是想證明這個習語可以非常可讀和直觀,不管有多少條件。 –

+0

@markoTopolnik感謝使代碼可讀,始終開放給有經驗人士的建議:) – NINCOMPOOP

+0

其實,最後一個:0應該有一個更多級別的縮進,是完全可讀的,不是? – mdm

2

,你或許需要:

return a < b ? -1 : (a > b ? 1 : 0); 
+2

@Marko - 也許你不需要它們,我是這麼做的:) – Ingo

+0

實際上,這個成語可以很好地寫成幾行,看起來就像Lisp的'cond'宏,或者從條件到結果的映射。 –

+0

順便說一句,如果你有兩個以上的條件,parens只會使情況變得更糟。 –

0

內嵌if語句(問號)如果你有兩個狀態通常只期望。你的代碼的可讀性非常重要。 在你的情況下,你有3個狀態(0,1和-1);我不會推薦使用內聯if語句。

例內嵌if語句:

String value = variable==null?"defaultvalue":variable; 

這個if語句符號被稱爲ternary operator

1

,你可以簡單地寫:

public int compareTo(Uyum u){

return uyum - u.uyum; 

}

+1

這不會返回正確的答案。結果應該是'-1','0'或'1'中的一個。 – Snps

+1

@ snipes83其實,它會的。查看「Comparable」文檔。 –

+0

@MarkoTopolnik你怎麼知道OP正在實現'Comparable'? :) OP不說。 – Snps

0

在我看來,這u.uyum是一個int,在這種情況下,爲什麼不跟隨滿意?

return Integer.compare(uyum, u.uyum) 

如果你真的必須使用三元運算符,你可以做別人都提示:

return uyum > u.uyum ? 1 : uyum == u.uyum ? 0 : -1 

這往往是在雖然皺起了眉頭,因爲它並不十分清晰。

+0

你怎麼能說這是一個Int?它可能很短,字符,雙重,甚至布爾。因此'((可比較的)uyum)',它會變成正確的類型。 – Ingo

+0

不會導致編譯警告(不安全的調用compareTo(T)yadda yadda yadda')雖然? –

+0

你的意思是鑄造成「可比較的」嗎?這對我來說似乎有些詭異,所以我放棄了它,並沒有編譯。或者我錯過了什麼? –

0

return (uyum-u.uyum)==0?0:((uyum-u.uyum)<0?-1:1)

+0

如果uyum是**布爾值**會怎麼樣? – Ingo

+0

@ingo它不是布爾值。檢查OP的代碼:'uyum

+0

@MarkoTopolnik這是真的! Java不會比較布爾值!現在我更瞭解人們爲什麼討厭Java。 – Ingo