Перестановка значений двух переменных без вспомогательных ресурсов

В заданном контракте поменять переменные вызывающего кода невозможно: 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 вообще не даёт изменяемых переменных снаружи. Для настоящего обмена нужен другой контракт: вернуть пару значений, передать изменяемый контейнер либо выполнить обмен непосредственно в вызывающем коде. Все эти варианты ослабляют заявленный запрет на дополнительные ресурсы.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее