如何查找数字是否在Java范围内? Math.abs的问题(num1-num2)< = inRange

时间:2011-11-02 06:55:55

标签: java math

我在另一个问题中看到,找到你的号码在一个范围内的解决方案是,

Math.abs(num1-num2) <= inRange

其中inRange是你试图弄清楚它是否在num2和num1之间的范围。

这个公式对我来说是插入这些数字的时候。

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

我试图找出-5是否介于-25和25之间。即使答案为真,这个等式也是假的,-5介于-25到25之间。

请为我澄清!

6 个答案:

答案 0 :(得分:24)

我认为没有任何理由可以使用Math.abs。我会用:

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

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

如果你想让上限也是包容性的。

事实上,Math.abs()方法似乎完全被打破 - 我强烈怀疑你误解了它作为解决方案所构成的问题。

答案 1 :(得分:6)

只是做:

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

您当前的方法只是检查数字范围。实际上是最小和最大的距离。

答案 2 :(得分:4)

对于奖励积分,在Guava 10.x中引入了一个新的Range类(与辅助类Ranges一起使用):

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在-25 .. + 25:真实 0在-25 .. + 25:真实 1英寸-25 .. + 25:真实 24在-25 .. + 25:真实 25英寸-25 .. + 25:真实 26 in -25 .. + 25:false

Range类支持开放和闭合范围,范围从-INF到+ INF,以及各种与范围相关的操作,如成员资​​格,交集和跨度。

答案 3 :(得分:1)

下面的表达式会检查x是否在ab之间:

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

答案 4 :(得分:0)

古老的问题,但是Math.abs方法可以根据您的工作而变得更清晰,仍然值得展示:

int x = 5;
int bounds = 25;
if(Math.abs(x) <= bounds) {
    //run if x is anywhere between -25 and 25
}

答案 5 :(得分:0)

kotlin具有..运算符

if (center.x in 0..MaxX) {
                   //Do stuff
}
if (center.y !in 0..MaxY) {
                    //Do stuff
}