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

KRB*_*KRB 7 java math

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

Math.abs(num1-num2) <= inRange
Run Code Online (Sandbox Code Playgroud)

其中inRange是您试图弄清楚它是否在num2和num1之间的范围内的数字.

这个公式为我打破的地方是我插入这些数字.

Math.abs(25-(-25)) <= -5
Run Code Online (Sandbox Code Playgroud)

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

请为我澄清一下!

Jon*_*eet 26

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

if (lowerBound <= value && value < upperBound)
Run Code Online (Sandbox Code Playgroud)

要么

if (lowerBound <= value && value <= upperBound)
Run Code Online (Sandbox Code Playgroud)

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

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


Sae*_*iri 6

做就是了:

bool isInRange = Math.min(num1,num2) <= inRange 
                && Math.max(num1,num2) >= inRange;
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*e J 6

对于奖励积分,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);
    }

}
Run Code Online (Sandbox Code Playgroud)

输出:

-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 in -25..+25: true
24 in -25..+25: true
25 in -25..+25: true
26 in -25..+25: false

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

  • 从 Guava 14 开始,您应该使用 `Range` 本身的静态方法来实例化 `Range`s(不推荐使用 `Ranges`),例如 `Range.closed(-25, +25)`。 (2认同)