在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
}
当然上面的代码很丑陋且难以阅读。那么有更好的方法吗?
答案 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来执行比较。