Обмен значениями двух переменных в Java — с временной переменной и без

Классическая задача: есть две переменные a и b, нужно поменять их значения местами. На programiz даны два решения: классический способ через временную переменную и хитрый — без неё, через арифметику. Полезное упражнение для понимания того, как работают переменные.

Пример 1: обмен через временную переменную

Сохраняем первое число во временную переменную, чтобы не потерять его при перезаписи. Самый понятный и надёжный способ.

public class SwapNumbers {

    public static void main(String[] args) {

        float first = 1.20f, second = 2.45f;

        System.out.println("--Before swap--");
        System.out.println("First number = " + first);
        System.out.println("Second number = " + second);

        // Value of first is assigned to temporary
        float temporary = first;

        // Value of second is assigned to first
        first = second;

        // Value of temporary (which contains the initial value of first) is assigned to second
        second = temporary;

        System.out.println("--After swap--");
        System.out.println("First number = " + first);
        System.out.println("Second number = " + second);
    }
}

Вывод:

--Before swap--
First number = 1.2
Second number = 2.45
--After swap--
First number = 2.45
First number = 1.2

В программе два числа 1.20f и 2.45f сохранены в переменных first и second.

Сами переменные выводятся до обмена через println(), чтобы наглядно видеть результат.

  • Сначала значение first сохраняется в переменную temporary (temporary = 1.20f).

  • Затем значение second записывается в first (first = 2.45f).

  • И, наконец, значение temporary записывается в second (second = 1.20f).

Обмен завершён, и переменные выводятся на экран.

Совет

Единственное назначение temporary — временно хранить значение first до обмена. Можно поменять числа местами и без неё — см. следующий пример.

Пример 2: обмен без временной переменной

Этот способ использует только арифметику. Хитрый трюк, на котором удобно проверить своё понимание переменных и операторов.

public class SwapNumbers {

    public static void main(String[] args) {

        float first = 12.0f, second = 24.5f;

        System.out.println("--Before swap--");
        System.out.println("First number = " + first);
        System.out.println("Second number = " + second);

        first = first - second;
        second = first + second;
        first = second - first;

        System.out.println("--After swap--");
        System.out.println("First number = " + first);
        System.out.println("Second number = " + second);
    }
}

Вывод:

--Before swap--
First number = 12.0
Second number = 24.5
--After swap--
First number = 24.5
Second number = 12.0

В этой программе вместо временной переменной мы используем простую математику для обмена чисел местами.

Для операции важно сохранить (first - second) — это значение записывается в first.

first = first - second;
first = 12.0f - 24.5f

Затем мы просто прибавляем second (24.5f) к получившемуся first (12.0f - 24.5f), чтобы получить новое значение second.

second = first + second;
second = (12.0f - 24.5f) + 24.5f = 12.0f

Теперь second содержит 12.0f (исходное значение first). Вычитаем посчитанный first (12.0f - 24.5f) из обновлённого second (12.0f) — и получаем второе обменянное число.

first = second - first;
first = 12.0f - (12.0f - 24.5f) = 24.5f

Обменянные числа выводятся на экран через println().