Я неправильно ответил на тест, может кто-нибудь объяснить правильный ответ?
«Каким должно быть отсутствующее выражение if, чтобы этот метод всегда возвращал неотрицательное значение?»
int mystery2 (int n) {
if (<< expression >>) {
return -n;
} else {
return n;
}
}
МНОГОВЫБОР ОТВЕТОВ
упс. пропустил отрицательный результат в первом операторе if. В любом случае, для такого простого вопроса лучший вариант — написать его и выяснить, каким должен быть результат в вашей собственной IDE.
Если вы не уверены, как решить эту задачу, вы всегда можете попробовать доказать ее с помощью контрпримера (больше математики, чем программирования, но неважно). Для трех из четырех вариантов ответа вы можете придумать вариант для n, который вернет результат отрицательное число.
@BIBOOunit вам даже не нужна IDE, для этого простого выражения вы можете использовать jshell
, чтобы опробовать его из командной строки
да, я не знал о jshell. Это приятно знать
Технически ни один из ответов не является правильным. Если n
равно Integer.MIN_VALUE
, то -n == n
, поэтому метод вернет отрицательное число независимо от условия.
Правильным выражением является n < 0, поскольку оно гарантирует, что метод возвращает неотрицательное значение путем преобразования любых отрицательных входных данных в положительные выходные данные, оставляя при этом неотрицательные входные данные неизменными.
В этом столько смысла! спасибо за помощь :)
@xGutterRatx Рад, что вы нашли ответ! Пожалуйста, примите его, поставив галочку, чтобы выразить свою признательность и сообщить, что ваша проблема решена.
Хотя n < 0
, вероятно, и есть предполагаемый ответ, он неверен. Когда n
равен Integer.MIN_VALUE
, -n
по-прежнему отрицательный.
Вот как выражение всегда возвращает неотрицательное значение.
if (n < 0) {
return -n;
} else {
return n;
}
ответ 4. упр. если n = -3, вы вернете -(-3), то есть 3. т.е. когда n отрицательное, вы умножаете его на -1, чтобы оно стало положительным.