Java 链式不等式比较 (5 < i < 10)

问题描述 投票:0回答:6

这样的操作有什么操作符或者技巧吗? 还是有必要用这个:

if (5 < i && i < 10)
java comparison operators
6个回答
24
投票

你不能将不平等串联起来。但是,您可以定义一个静态布尔方法

isInRange(value, low, high)
来执行此类检查。

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


13
投票

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

5<i
会在
<10
左侧产生布尔值,这是编译器不喜欢的。


5
投票

恐怕目前 Java 不支持链式不等式。检查this帖子了解支持的语言。


5
投票

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

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

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

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


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)){

1
投票

一个< x < b is equivalent to (x-a)(x-b)<0, or if x is an expression you only wanna calculate once,

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

同样处理两个非严格相等。然而,我认为没有一种方法可以处理一个严格相等和一个非严格相等(除非 x 是整数)。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.