Вопрос по integer, comparison, java, if-statement – Проверка int в пределах диапазона

2

Есть ли элегантный способ в Java, чтобы проверить, равно ли int или 1 больше / меньше, чем значение.

Например, если я проверюx быть рядом5, Я хочу вернуть истину на4, 5 and 6потому что 4 и 6 только один от 5.

Есть ли встроенная функция для этого? Или мне лучше так написать?

int i = 5;
int j = 5;
if(i == j || i == j-1 || i == j+1)
{
    //pass
}
//or
if(i >= j-1 && i <= j+1)
{
    //also works
}

Конечно, приведенный выше код ужасен и труден для чтения. Так есть ли лучший способ?

Ваш Ответ

2   ответа
2

Math.abs(x-5) <= 1 как простой тест. Тем не менее, элегантный в глазах смотрящего. Вместо этого стремитесь к ясности.

Заметьте, что в общем случае для чего-то вроде точного ответа Glitch или даже этого существуют условия переполнения, которые необходимо проанализировать и понять. Для корректности всех возможных целых чисел вы должны привести аргументы к long и выполнить сравнение, используя long.

@ Pieter888: добро пожаловать. Я добавлю несколько оговорок к своему ответу, так как я придирчивый :)
Спасибо за быстрый ответ, он работает, но я пойду с ответом @ Glitch, так как в конце он станет более читабельным. Спасибо! Pieter888
5

Math.abs

private boolean close(int i, int j, int closeness){
    return Math.abs(i-j) <= closeness; 
}

На основании комментария @GregS о переполнении, если вы дадитеMath.abs разница, которая не будет вписываться в целое число, вы получите значение переполнения

Math.abs(Integer.MIN_VALUE - Integer.MAX_VALUE) //gives 1

Приведя один из аргументов в длиннуюMath.abs вернет длинное значение, означающее, что разница будет возвращена правильно

Math.abs((long) Integer.MIN_VALUE - Integer.MAX_VALUE) //gives 4294967295

Таким образом, с учетом этого метод теперь будет выглядеть так:

private boolean close(int i, int j, long closeness){
    return Math.abs((long)i-j) <= closeness; 
}
Спасибо за быстрый ответ, я пойду с этим, так как это наиболее читаемое решение. Мне очень помогли! Pieter888

Похожие вопросы