| Четные и нечетные числа |
|
|
Tuesday, 22 August 2006 | Сайт «Java-академия» для раздела Ученье – свет Ниже указанный метод используется многими программистами, чтобы определить является число четным или нет.public static boolean isOdd(int i) {
return i%2 = =1; } Но всегда ли этот метод дает правильный результат?
Объяснение:
Для начала давайте вспомним, что такое четное число. Четным числом можно назвать целое число, остаток которого при делении на два будет равен 0. Выражение i%2, которое мы используем в нашем примере, выглядит вполне работающим, и если значение переменной i будет равно 1, 3 или 5, то мы получим правильный результат. Метод вернет значение true, а значит число нечетное. Но к сожаление это не всегда так! Выше указанный метод не всегда будет возвращать ожидаемый и верный результат.
Для того, чтобы убедиться в этом, попробуйте вызвать метод, придав ему отрицательное значение -1.
Разобраться в таинственном результате можно взглянув на определение оператора %:
(a / b) * b + (a % b) = = a
где а целое число и b не равняется нулю. Но ведь и целые числа могут быть отрицательными!
То есть если а разделить на b и сложить с результатом выражения (a % b), то мы вернемся к значению а, что противоречит нашему выражению, используемого в выше указанном методе.
Если i = -1, то i % 2 не равняется 1. А если при делении двух чисел (отрицательного и положительного) результат значения не равняется нулю, то его знак будет знаком левого операнда.
Исправить ошибку в нашем методе очень легко. Для этого достаточно переписать его следующим образом:
public static boolean isOdd(int i) {
return i % 2 !=0; } Если вы создаете приложение, скорость выполнения которого является приоритетной задачей, то лучше, конечно, использовать оператор AND(&), а не %.
public static boolean isOdd(int i) {
return (i & 1) != 0; } В заключение хотелось бы посоветовать всегда обращать внимание на знаки операндов в математических операциях. Особенно при работе с оператором %, результат работы которого очевиден, если оба операнда - положительные числа, но намного сложнее, если один или оба операнда - отрицательные числа.
Удачи!
|