Java - Язык:Математическое условие
-
08-07-2019 - |
Вопрос
Есть ли простой способ сделать это
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, который я знаю, поддерживает цепочечные неравенства.