Вопрос

Есть ли простой способ сделать это

if (1 < x && x < 3) { .... }

Я хочу что-то вроде этого:

if (1 < x < 3) { .... }

Я знаю, что приведенный выше код неверен, но....

Спасибо

Это было полезно?

Решение

К сожалению, вы не можете сделать это на Java.Однако вы можете создать класс, скажем MathUtils, с помощью isBetween метод, например, такой:

public static boolean isBetween(int n, int begin, int end) {
  return n > begin && n < end;
}

Затем вы могли бы использовать (предполагая, что вы import static):

if (isBetween(x, 1, 3)) {
  // ...
}

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

Другие советы

Предполагая, что вы говорите о целых числах:

if ( x == 2 ) { .... }

Есть довольно много маленьких особенностей Java, которые происходят из-за того, что она является лучшим C ++ - в C или C ++ есть автоматическое преобразование между логическими значениями и целыми числами, поэтому в C ++:

int x = 5;

std::cout << std::boolalpha;

std::cout << ( 1 < x < 3 ) << std::endl;
std::cout << ( ( 1 < x ) < 3 ) << std::endl;

выведет "true" дважды, как ( 1 < x ) вычисляется как 1, а 1 меньше 3.Java концентрируется на устранении этой двусмысленности с помощью синтаксического анализа двух двоичных операторов, делая логические и целочисленные типы неконвертируемыми, поэтому вам придется объединить их с другим оператором;другие языки не пытаются исправить C ++, но имеют более сложные правила синтаксического анализа, так что _ < _ < _ - это троичный оператор, который выполняет правильные действия.

Не используя встроенные языковые;вам нужно было бы перейти к вашему первому ответу.

Несколько библиотек позволят вам сделать что-то вроде следующего:

Range range = new ExclusiveRange(1,3);
if (range.contains(x)) { ... }

С точки зрения эффективности, (1 < x && x < 3) это настолько хорошо, насколько вы сможете получить.Чтобы поместить целое число в диапазон, вам нужно выполнить два сравнения.

Если вы хотите сделать свой код более читаемым и у вас много таких диапазонов, вы можете рассмотреть возможность создания класса Interval с функцией contains().

У вас есть самая простая форма с точки зрения прямого синтаксиса Java.Вы могли бы ввести метод, если бы захотели:

public static boolean isBetween(int x, int min, int max) {
    return min < x && x < max;
}

затем вызовите его с помощью:

if (isBetween(x, 1, 3))

но я не думаю, что это действительно что-то проясняет - и это означает, что есть больше возможностей расставить аргументы в неправильном порядке.В Range класс, предложенный в другом ответе, облегчил бы эту проблему, но ценой добавления еще большего беспорядка...

Это утверждение, использующее && это самое простое, что вы можете получить.Java, как и любой другой язык в стиле C, который я знаю, поддерживает цепочечные неравенства.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top