Явное цепное неравенство, если (5 <i <10)

Есть ли какой-либо оператор или трюк для такой операции? Или необходимо использовать

if(5<i && i<10)

?

Ответ 1

В Java нет такой вещи (если вы не работаете с булевыми).

5<i выводит логическое значение с левой стороны на <10, которое не нравится компилятору.

Ответ 2

Вы не можете цеплять неравенства. Однако вы можете определить статический логический метод isInRange(value, low, high), который выполнит такую ​​проверку.

Некоторые другие языки, такие как Python или Icon, позволяют использовать эти обозначения.

Ответ 3

Вы можете использовать одно сравнение, но оно сложнее, чем обычно.

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

В этом случае используется underflow, чтобы изменить все значения 5 и ниже на большое положительное значение.

Единственная причина, по которой вы будете использовать это, - это микро-оптимизация.

Ответ 4

Я боюсь, что в настоящее время Java не поддерживается в Java. Отметьте этот сообщение для языков, которые делают.

Ответ 5

Диапазон

Сравнение не может быть привязано к Java.

Стандартный способ выполнения проверки диапазона - использовать Диапазоны Guava:

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

Ответ 6

a < x < b эквивалентно (x-a) (x-b) < 0, или если x является выражением, которое вы только хотите рассчитать один раз,

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

То же самое дело с двумя нестрогими равенствами. Однако я не думаю, что есть способ справиться с одним строгим и одним нестрогим равенством (если только х не является целым числом).