2

java中是否有一种优雅的方法来检查int是否等于或大于/小于值1。

例如,如果我检查x是否在5. 我想在 上返回 true 4, 5 and 6,因为 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
}

当然,上面的代码丑陋且难以阅读。那么有没有更好的方法呢?

4

2 回答 2

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

通过将参数之一转换为 longMath.abs将返回 long 意味着将正确返回差异

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; 
}
于 2012-06-12T00:01:46.033 回答
2

用作Math.abs(x-5) <= 1一个简单的测试。然而,优雅在情人眼中。而是力求清晰。

请注意,通常情况下,对于像 Glitch 的好答案甚至这个,必须分析和理解溢出条件。为了所有可能的整数的正确性,您应该将参数转换为 long 并使用 long 执行比较。

于 2012-06-12T00:02:01.370 回答