В заданном контракте поменять переменные вызывающего кода невозможно: Java передаёт int по значению. Любой обмен внутри void swapIntegers изменит только локальные параметры a и b.
Перестановка значений двух переменных без вспомогательных ресурсов
В заданном контракте поменять переменные вызывающего кода невозможно: Java передаёт int по значению. Любой обмен внутри void swapIntegers изменит только локальные параметры a и b.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Необходимо написать функцию, которая меняет местами значения переменных a и b, не прибегая к использованию дополнительных переменных, объектов или готовых структур языка. Функция должна работать непосредственно с переданными параметрами и не возвращать результат.
public class JetbulbInterview {
public static void main(String[] args) {
// Пример: swapIntegers(10, 20)
// После выполнения:
// a = 20;
// b = 10;
}
static void swapIntegers(int a, int b) {
// Реализовать обмен значений
}
}
Ответ
В заданном контракте поменять переменные вызывающего кода невозможно: Java передаёт int по значению. Любой обмен внутри void swapIntegers изменит только локальные параметры a и b.
Даже последовательность a ^= b; b ^= a; a ^= b; поменяет лишь копии чисел внутри метода. После возвращения вызывающие переменные останутся прежними; передача литералов 10 и 20 вообще не даёт изменяемых переменных снаружи. Для настоящего обмена нужен другой контракт: вернуть пару значений, передать изменяемый контейнер либо выполнить обмен непосредственно в вызывающем коде. Все эти варианты ослабляют заявленный запрет на дополнительные ресурсы.