Авторские Материалы о событиях в Израиле на Ближнем Востоке и в мире

IsraMir.com - Израильская журналистика

Default color brown color green color red color blue color
Вы сейчас тут: Новости arrow Техотдел arrow Свет ученья arrow Четные и нечетные числа
Skip to content
Четные и нечетные числа Версия для печати Отправить на e-mail
Tuesday, 22 August 2006 | Сайт «Java-академия» для раздела Ученье – свет
ЧетныеинечетныечислаJavaisramir.comНиже указанный метод используется многими программистами, чтобы определить является число четным или нет.
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;
}
 
В заключение хотелось бы посоветовать всегда обращать внимание на знаки операндов в математических операциях. Особенно при работе с оператором %, результат работы которого очевиден, если оба операнда - положительные числа, но намного сложнее, если один или оба операнда - отрицательные числа.
 
Удачи!
 
 
 

Добавить комментарий

:D:lol::-);-)8):-|:-*:oops::sad::cry::o:-?:-x:eek::zzz:P:roll::sigh:


Автотранслитерация: выключена

Защитный код

Powered by jComments