Jak zamienić wartości 2 zmiennych bez zmiennej tymczasowej?

Pamiętacie pewnie z Algorytmów czy Metod Programowania, jak trzeba było zamieniać wartości zmiennych miejscami, np. w algorytmach sortujących. Pisało się wtedy kod w stylu:

tmp = i
i = j
j = tmp 

Poniżej prezentuje znalezione przeze mnie sposoby, jak zamienić wartości dwóch zmiennych bez użycia zmiennej pomocniczej.

Sposób z dodawaniem i odejmowaniem

public class FirstVersion {

	public static void main(String[] args) {
		int x = Integer.parseInt(args[0]);
		int y = Integer.parseInt(args[1]);

		x = x + y;
		y = x - y;
		x = x - y;

		System.out.println("x=" + x + ", y=" + y);
	}
}

Po uruchomieniu otrzymujemy:

 java FirstVersion 8 2
x=2, y=8

Sposób z mnożeniem i dzieleniem

public class SecondVersion {

	public static void main(String[] args) {
		int x = Integer.parseInt(args[0]);
		int y = Integer.parseInt(args[1]);

		x = x * y;
		y = x / y;
		x = x / y;

		System.out.println("x=" + x + ", y=" + y);
	}
}

Po uruchomieniu otrzymujemy:

 java SecondVersion 8 2
x=2, y=8

Sposób z operatorem bitowym XOR

public class ThirdVersion {

	public static void main(String[] args) {
		int x = Integer.parseInt(args[0]);
		int y = Integer.parseInt(args[1]);

		x = x ^ y;
		y = x ^ y;
		x = x ^ y;

		System.out.println("x=" + x + ", y=" + y);
	}
}

Po uruchomieniu otrzymujemy:

 java ThirdVersion 8 2
x=2, y=8

Ostatni sposób jest najszybszy i najmniej newralgiczny. Mimo wszystko nie polecam używania powyższych konstrukcji w kodzie produkcyjnym, gdyż komplikują kod. Można je traktować jako ciekawostkę, chociaż słyszałem, że podobne pytania pojawiają się podczas rozmów rekrutacyjnych.

5 komentarzy to “Jak zamienić wartości 2 zmiennych bez zmiennej tymczasowej?”

Leave a Reply