你如何找到一个数字是否在 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之间。

请给我澄清一下!

我看不出有任何理由使用Math.abs。我使用:

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

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

如果你想让上界也包含在内。

事实上,Math.abs()方法似乎完全坏了——我强烈怀疑你误解了这个问题,它被提出作为一个解决方案。

为了加分,在Guava 10.x中引入了一个新的Range类(与helper类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:假
-25 in -25…+ 25:真
-24 in -25..+ 25:真
-1 in -25…+ 25:真
0在-25..+ 25:真
1在-25..+ 25:真
24 in -25..+ 25:真
25 in -25…+ 25:真
26 in -25..+ 25:假

Range类支持开范围和闭范围,范围从-INF到+INF,以及所有与范围相关的操作,如隶属关系、交集和跨度。

Just do:

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

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

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

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

老问题,然而数学。Abs方法可以根据您的工作内容更清晰,并且仍然值得展示:

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

kotlin has ..操作符

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

相关内容

最新更新