Una de las operaciones que realizamos habitualmente es el intercambio de elementos, swap, en nuestros programas. Para ello lo mas natural es utilizar una tercera variable de almacén temporal para realizar este intercambio.
Pues existe un método para poder realizar este intercambio, entre variables numéricos, sin tener necesidad de utilizar una tercera variable.
Supongamos que tenemos dos variables con los valores 30 y 40;
int a = 30;
int b = 40;
Podemos realizar este intercambio realizando las siguiente operación;
a = a + b // a la variable a le asigno el valor de a + b
En este paso el valor de a es = 70 (30 + 40)
b = a – b // A b le asigno el resultado de resta al valor calculado anteriormente de a con el valor inicial de b
Cuando realizamos esta resta la operación que estamos haciendo es la siguiente b = a – b = (30 + 40) – 40
Después de la resta el valor que nos queda almacenado en b es el valor de a de 40.
a = a – b // Y una vez realizado el cálculo de b le resto el valor a la variable de a el nuevo valor de b
Y por último en esta resta la operación que estamos realizando es a = (30 + 40) – 30
Quedándonos en a el valor de inicial de b de 40.
Si mostramos el valor de esta variables por pantalla veremos que ambos valores se ha intercambiado.
Tras este artículo podemos llegar a la conclusión que no debemos abusar de crear variables para ayudarnos a resolver cualquier operación. A veces con nuestro propio ingenio y nuestro conocimientos podemos llegar a otras soluciones.
En el siguiente articulo «How to Swap Two Numbers without Temp or Third variable in Java» de javarevisited (en Inglés) tenéis descrito otras formas de poder realizar esta operación, por ejemplo a nivel de bit, sin tener que utilizar variables auxiliares