检查范围内的int

时间:2012-06-11 23:58:17

标签: java if-statement comparison integer

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

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

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

2 个答案:

答案 0 :(得分: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

通过将一个参数强制转换为长Math.abs将返回一个很长的含义,即差异将正确返回

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; 
}

答案 1 :(得分:2)

使用Math.abs(x-5) <= 1作为简单测试。然而,优雅是在旁观者的眼中。为了清晰而努力。

注意一般情况下,对于类似Glitch的精细答案甚至是这样的事情,必须分析和理解溢出条件。为了确保所有可能的整数,你应该将参数转换为long并使用long来执行比较。