This blog will soon be merged with

JavaByPatel

which explains each solution in detail, to visit new blog, click JavaByPatel

Tuesday, 19 May 2015

Swap 2 numbers without using any temporary variable


package miscellaneous;

public class Swap2NumberWithoutTempVariable {
 public static void main(String[] args) {
  int a =10;
  int b=-1; 
  way1(a, b);
  way2(a, b);
  way3(a, b);
 }

 //Arithmetic Overflow Issue. If x and y are too large, addition and multiplication may go out of integer range.
 private static void way1(int a, int b){
  System.out.println("Before swap a="+a + " , " + "b="+b);
  a=a-b;
  b=a+b;
  a=b-a;
  System.out.println("After Swap a="+a + " , " + "b="+b);
 }

 private static void way2(int a, int b){
  System.out.println("Before swap a="+a + " , " + "b="+b);
  a=a^b;
  b=a^b;
  a=b^a;
  System.out.println("After Swap a="+a + " , " + "b="+b);

  //How this approach is working, lets see
  //We want to change a to b and vice versa, if we change the bits of a to match exactly as b then a will become b.
  //Now what are the bits difference between a and b that we will get using XOR and XOR will give 0 for same bits and 1 for non matching.
 }

 //The multiplication and division based approach will not work if one of the numbers is 0 as the product becomes 0 irrespective of the other number.
 private static void way3(int a, int b){
  System.out.println("Before swap a="+a + " , " + "b="+b);
  a=a*b;
  b=a/b;
  a=a/b;
  System.out.println("After Swap a="+a + " , " + "b="+b);
 }
}



No comments:

Post a Comment