2011-04-28 50 views
4

什麼是Java中最簡潔的方式來檢查以下條件簡化的Java語法

int m, n; 

檢查爲m或n是否爲負,但兩者不應該是否定的條件。我在尋找一個簡潔而又簡單的語法

+1

if(m * n <0)then ... – euphoria83 2011-04-28 20:50:58

+1

@euphoria:這將不會應付溢出。 – 2011-04-28 20:51:58

+0

我知道。它適用於簡單的用例,我推斷它來自用戶的問題。 – euphoria83 2011-04-28 21:01:14

回答

15
(m < 0)^(n < 0) 

注意,在此背景下,^邏輯XOR運算符(是的,我的意思是「邏輯」,從「按位」不同)。

+1

xor是一個「廣爲人知」的操作數 – gd1 2011-04-28 20:55:39

+2

這主要是因爲人們不瞭解位。他們應該這樣做。 – vichle 2011-04-28 20:57:27

+0

優秀!!!!!! – Pan 2011-04-28 21:16:46

12
(m^n) < 0 

甚至更​​多的填充,以作出適當的長度答案。

+0

好吧,現在我的頭疼了,但在一個很好的方式! – Doug 2011-04-28 21:06:44

+2

+1:這是比我的答案terser,並在Java中定義(不像在C)。然而,我不會使用它,因爲它的意圖不太清楚。 – 2011-04-28 21:10:26

+0

@Oli Charlesworth - 我認爲這兩者都不是特別清楚,對於大多數按位操作來說都是如此。如果這不是評論的理由,我不知道是什麼8) – Robin 2011-04-28 21:20:56

1

基本上,您的測試應該是 - 符號位(最高順序)不同。

這裏是用java表達的測試;

if ((x & Integer.MIN_VALUE) != (y & Integer.MIN_VALUE)) 
    ... 
2

我會去:

(m < 0) != (n < 0) 

!=操作一樣^boolean S,但我認爲這是容易理解和更常用。

+0

這肯定比接受的答案更清楚,但是我不能贊成,因爲有人在我的答案的評論中給出了這個答案。此外,我認爲我們要簡潔;-) – Robin 2011-05-03 15:42:33

+0

@Robin我看到@EJB沒有括號給出它(我不想依賴那種運算符優先級,儘管Java足夠強大,足以使其對於正常人)。 WordNet將簡潔定義爲「簡潔而簡潔的表現風格」。我認爲你的解決方案不是富有表現力的風格。 (順便說一句:我回答爲CW,所以不必擔心upvoting會給予不合格的人以補償。) – 2011-05-03 16:27:16

+0

Hawtin - 免費的在線詞典 - >簡潔:簡要和重點;有效簡潔8-) – Robin 2011-09-06 16:34:47