Обмен значениями двух переменных в 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().