检查范围内的int

Pie*_*888 2 java comparison integer if-statement

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

例如,如果我检查x一下5.我想要回归真实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
}
Run Code Online (Sandbox Code Playgroud)

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

n00*_*gon 5

找出它们之间的绝对差异 Math.abs

private boolean close(int i, int j, int closeness){
    return Math.abs(i-j) <= closeness; 
}
Run Code Online (Sandbox Code Playgroud)

基于@GregS关于溢出的注释,如果你给出Math.abs一个不适合整数的差异,你将获得溢出值

Math.abs(Integer.MIN_VALUE - Integer.MAX_VALUE) //gives 1
Run Code Online (Sandbox Code Playgroud)

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

Math.abs((long) Integer.MIN_VALUE - Integer.MAX_VALUE) //gives 4294967295
Run Code Online (Sandbox Code Playgroud)

因此,考虑到这一点,该方法现在将如下所示:

private boolean close(int i, int j, long closeness){
    return Math.abs((long)i-j) <= closeness; 
}
Run Code Online (Sandbox Code Playgroud)