当前位置: 首页 > 面试题库 >

检查范围内的int

徐学潞
2023-03-14
问题内容

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

例如,如果我检查x周围5。我想在上返回true 4, 5 and 6,因为4和6距5仅1。

有内置功能可以做到这一点吗?还是我最好这样写?

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
}

当然,以上代码很难看懂。那有更好的方法吗?


问题答案:

找到它们之间的绝对差异 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

通过将其中一个参数强制转换为long Math.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; 
}


 类似资料:
  • 我的Java外汇应用程序处理工作时间。我在两个日期字段中有工作开始和结束时间。我成功地计算了两个日期之间的差异时间;但是现在我如何检查结果是在晚上还是白天的范围内???一天从6点开始,到22点结束。例如,有人在凌晨3点到晚上11点之间工作。下面是我如何计算总工作小时数的。 我们有可以工作到晚上10点以上的工人,工资也不一样。如果他们在晚上10点以后工作,他们将获得特殊报酬。我们在工作结束时付款。他

  • 问题内容: 有没有一种方法可以在不执行此冗余代码的情况下测试范围: ? 就像一个函数: 用法: ? PHP是否具有这种内置功能?还是其他方式可以做到? 问题答案: 我认为您不会获得比您的功能更好的方法。 它是干净的,易于遵循和理解的,并返回条件的结果(无混乱)。

  • 问题内容: 使用oracle中的范围分区,我们将大量数据按年值进行了分区。我们使用了范围分区,但每个分区仅包含一年的数据。当我们编写针对特定年份的查询时,oracle从该分区获取信息,但仍会检查年份是否是我们指定的年份。由于今年列不是索引的一部分,因此它从表中获取年份并进行比较。我们已经看到,每当查询去获取表数据时,它就会变得太慢。 我们可以以某种方式避免oracle比较年份值,因为我们确定知道分

  • 问题内容: 我有一个要求,我必须找到不同年龄段的人数,例如: 我正在SQL Server中创建一个存储过程,该过程将首先创建一个临时表并存储年龄组,例如一列将为0,另一列将为5,依此类推。然后,我将遍历它们,找到最小和最大范围之间的计数,并将该计数与mim- max值一起存储在另一个临时表中。 是否有其他简便更好的方法来实现此输出。请指教。 问题答案: 也许与和: 演示版 或者,对于范围表,您可以

  • 下面是一些代码的压缩版本,它会导致范围检查错误和溢出错误,如果我打开这些编译器检查指令的话。我理解为什么这会导致溢出,在C1的乘法上,它似乎可能会超过数据类型的最大值。但为什么这也会触发范围检查错误?Delphi的文档和其他关于堆栈溢出的文章听起来像是范围检查错误通常是针对超出范围的数组访问。但是我没有访问一个数组,因为它说的数组导致了范围检查错误。也许是在派往param1的任务上?但如果是这样的

  • 问题内容: 如果有和,如何检查用户给出的日期是否在该范围内? 例如 目前日期是字符串,将它们转换为时间戳整数是否有帮助? 问题答案: 使用strtotime将它们转换为时间戳是正确的方法,例如