2011-11-02 48 views
1

我已經看到了另外一個問題,解決發現,如果你的號碼是在範圍爲,如何查找數字是否在Java範圍內?有問題Math.abs(NUM1 - NUM2)<= INRANGE

Math.abs(num1-num2) <= inRange 

INRANGE哪裏是你的號碼試圖弄清楚它是否在num2和num1之間的範圍內。

這個公式對我來說是突破的地方是當我插入這些數字。

Math.abs(25-(-25)) <= -5 

我試圖找到,如果-5是在-25到25這個公式是錯誤的,即使答案是真的,-5 -25和25

請澄清介於爲了我!

+1

該公式絕對看起來越野車。只是好奇,如果你有界限和數量,你不能只是做一個簡單的條件(a <= n <= b)嗎?我的意思是,這些計算中有一點與我缺少的直接比較有關嗎? – aishwarya

回答

17

我根本沒有看到任何理由使用Math.abs。我會用:

if (lowerBound <= value && value < upperBound) 

if (lowerBound <= value && value <= upperBound) 
如果你想上必然是包容太

事實上,Math.abs()似乎完全破 - 我強烈懷疑你誤解了它作爲解決方案提出的問題。

7

只要做到:

bool isInRange = Math.min(num1,num2) <= inRange 
       && Math.max(num1,num2) >= inRange; 

您目前的做法只檢查數量範圍。實際上是最小的和最大的距離。

1

低於表達式將檢查xab之間:

Math.abs(x - a) + Math.abs(b - x) == Math.abs(b - a) 
+2

你的方式很棘手,但它不是一種在開發中使用的方式,乍一看不清楚,應該證明它,所以最好使用更易讀的代碼。 –

4

加分,有一個新的Range類(輔助類Ranges使用)番石榴10.x中介紹:

import com.google.common.collect.Range; 
import com.google.common.collect.Ranges; 

public class RangeTest { 

    Range<Integer> range = Ranges.closed(-25, +25); 

    public boolean rangeTest(Integer candidate) { 
     return range.contains(candidate); 
    } 

} 


public class TestMain { 
    static RangeTest rangeTest = new RangeTest(); 

    public static void doTest(Integer candidate) { 
     System.out.println(candidate + " in -25..+25: " 
       + rangeTest.rangeTest(candidate)); 
    } 

    public static void main(String[] args) { 
     doTest(-26); 
     doTest(-25); 
     doTest(-24); 
     doTest(-1); 
     doTest(-0); 
     doTest(+1); 
     doTest(+24); 
     doTest(+25); 
     doTest(+26); 
    } 

} 

輸出:

-26 in -25 .. + 25:false
-25 in -25 .. +25:true
-24 in -25 .. +25:true
-1 in -25 .. +25:true
0 in -25 .. + 25:true
1在-25 .. + 25:真
24在-25 .. + 25:真
在-25 25 .. + 25:在-25真
26 .. + 25:假

Range類支持打開和關閉範圍,範圍從-INF到+ INF,以及各種範圍相關的操作,如成員資​​格,交集和跨度。

+1

既然Guava 14你應該在'Range'上使用靜態方法來實例化'Range's('Ranges'已被棄用),例如。 Range.closed(-25,+25)'。 – Eric

相關問題