Как ограничить число диапазоном
Короткий ответ
С Java 21 есть Math.clamp(value, min, max):
void main() {
IO.println(Math.clamp(150, 0, 100));
IO.println(Math.clamp(-5, 0, 100));
IO.println(Math.clamp(42, 0, 100));
}Результат:
100
0
42Через min и max
Тот же результат даёт сочетание Math.min() и Math.max() — так пишут в старых версиях Java:
void main() {
int volume = 120;
int limited = Math.max(0, Math.min(volume, 100));
IO.println(limited);
}Результат:
100Дробные числа
clamp() работает и с double:
void main() {
double opacity = 1.4;
IO.println(Math.clamp(opacity, 0.0, 1.0));
}Результат:
1.0Частая ошибка
Перепутать порядок границ. Math.clamp() проверяет, что минимум не больше максимума, и выбрасывает исключение:
void main() {
IO.println(Math.clamp(50, 100, 0));
}Результат:
Exception in thread "main" java.lang.IllegalArgumentException: 100 > 0Функции из этого ответа
- Math.min() — Возвращает меньшее из двух чисел.
- Math.max() — Возвращает большее из двух чисел.