17

这种操作有什么操作符或技巧吗?或者是否有必要使用

if(5<i && i<10)

?


你不能把不平等串联起来。但是,您可以定义一个静态布尔方法isInRange(value, low, high)来执行此类检查。

其他一些语言,如 Python 或Icon,允许使用这种表示法。

4

6 回答 6

24

你不能把不平等串联起来。但是,您可以定义一个静态布尔方法isInRange(value, low, high)来执行此类检查。

其他一些语言,如 Python 或Icon,允许使用这种表示法。

于 2012-05-18T19:03:02.480 回答
13

Java 中没有这样的东西(除非您使用布尔值)。

结果是编译器不喜欢5<i的左侧的布尔值。<10

于 2012-05-18T19:03:51.147 回答
5

恐怕目前 Java 不支持链式不等式。检查这篇文章的语言。

于 2012-05-18T19:04:40.717 回答
5

您可以使用单个比较,但通常比它的价值更复杂。

if (i - (Integer.MIN_VALUE + 6) < Integer.MIN_VALUE + (10 - 6))

这使用下溢将所有值 5 及以下调整为一个大的正值。

您使用它的唯一原因是作为微优化。

于 2012-05-18T19:07:24.470 回答
2

范围

比较不能在 Java 中链接。

进行范围检查的标准方法是使用Guava Ranges

import com.google.common.collect.Range;
...
    if(Range.open(5, 10).contains(x)){

或 Apache Commons Lang(不过它只提供封闭范围):

import org.apache.commons.lang3.Range;
...
    if(Range.between(5 + 1, 10 - 1).contains(x)){
于 2018-01-28T17:40:19.917 回答
1

a < x < b 等价于 (xa)(xb)<0,或者如果 x 是您只想计算一次的表达式,

(x - (a+b)/2) ^ 2 < (ba)^2 / 4

同样处理两个非严格等式。但是,我认为没有办法处理一个严格相等和一个非严格相等(除非 x 是整数)。

于 2014-07-11T14:05:06.340 回答