2012-06-11 546 views
1

一個int是否有在Java一種優雅的方法,以檢查是否一個int等於,或大於值1更大/更小。檢查範圍內

例如,如果我檢查x被周圍5。我想在4, 5 and 6返回true,因爲4和6只是一個遠離5

是否有功能的建立要做到這一點?還是我最好寫這樣寫?

int i = 5; 
int j = 5; 
if(i == j || i == j-1 || i == j+1) 
{ 
    //pass 
} 
//or 
if(i >= j-1 && i <= j+1) 
{ 
    //also works 
} 

當然,上面的代碼是醜陋的,很難閱讀。那麼有沒有更好的方法?

回答

5

查找與Math.abs

private boolean close(int i, int j, int closeness){ 
    return Math.abs(i-j) <= closeness; 
} 

它們之間的絕對差值基於@GregS如果你給Math.abs,將不適合到整數的差異,你會得到一個溢出值約四溢評論

Math.abs(Integer.MIN_VALUE - Integer.MAX_VALUE) //gives 1 

通過鑄造一個參數爲長Math.abs將返回一個長的含義差別將被正確

返回3210
Math.abs((long) Integer.MIN_VALUE - Integer.MAX_VALUE) //gives 4294967295 

所以考慮到這一點的方法將是這樣的:

private boolean close(int i, int j, long closeness){ 
    return Math.abs((long)i-j) <= closeness; 
} 
+0

感謝您的快速回答,我會與這一個去,因爲它是最可讀的解決方案。幫助了我很多! – Pieter888

2

使用Math.abs(x-5) <= 1作爲一個簡單的測試。然而,優雅是在旁觀者的眼中。力求清晰起來。

注比一般情況下,像毛刺的優良的答案,甚至這一點,有一些必須加以分析和理解溢出條件。爲了對所有可能的整數進行正確的處理,您應該將參數強制轉換爲long並使用long來執行比較。

+0

感謝您的快速回答,它的工作原理,但我會與@ Glitch的答案,因爲它最終更可讀。謝謝! – Pieter888

+0

@ Pieter888:您的歡迎。我會給我的答案添加一些注意事項,因爲我是個挑剔的人:) –