JAVA交換の2つの数でよく使われる3つの方法

14471 ワード

JAVA交換の2つの数でよく使われる3つの方法
  • 中間変数法
  • 数学演算法
  • 数学演算法 suo,
  • 第1種、中間変数法
    全体の考え方:2つの整形変数aとbがあって、まずaを3番目の変数cに払って、このようにaは記憶して、だからbを言ってaに与えて、更にcを言ってbに与えて、交換を完成して、コードは以下の通りです:
    public static void main(String[] args) {
    
    		int a = 2;
    		int b = 4;
    		int c = a;// a     c    
    		
    		System.out.print("    a " + a);
    		System.out.println(";    b " + b);
    		
    		a = b;
    		b = c;
    		
    		System.out.print("    a " + a);
    		System.out.print(";    b " + b);
    		
    	}
    

    出力結果:
    				    a 2;    b 4
    				    a 4;    b 2
    

    第2種、数学演算法
    全体的な考え方:まず2つの変数aとbの和をそのうちの1つの変数(例えばa)に与え、もう1つの変数bは第1の変数(すなわちb=a-b)に等しく減算し、変数aはa-bに等しく、コードは以下の通りである.
    	public static void main(String[] args) {
    
    		int a = 2;
    		int b = 4;
    		
    		System.out.print("    a " + a);
    		System.out.println(";    b " + b);
    		
    		a = a + b;
    		b = a - b;
    		a = a - b;
    		
    		System.out.print("    a " + a);
    		System.out.print(";    b " + b);
    	}
    

    実行結果は次のとおりです.
    		    a 2;    b 4
    		    a 4;    b 2
    

    第3種、異或運アルゴリズム(整数のみに有用!)
    これはコードで説明されています.コードは次のとおりです.
    public static void main(String[] args) {
    
    		int a = 2;
    		int b = 4;
    		
    		System.out.print("    a " + a);
    		System.out.println(";    b " + b);
    		
    		a = a ^ b;//^    
    		b = a ^ b;//
    		a = a ^ b;
    		
    		System.out.print("    a " + a);
    		System.out.print(";    b " + b);
    	}
    

    実行結果は次のとおりです.
    		    a 2;    b 4
    		    a 4;    b 2
    

    ではどう理解しますか!まず異或演算を解決します.つまり^
  • 演算に参加する2つのデータは、バイナリビットで「排他的OR」演算
  • を行う.
  • 例えば、2^4は、2のバイナリが0000 0014のバイナリが0000 0100である場合、または演算はバイナリが同じ0であり、異なる場合は1である.2^4=0000 0110=6故a = a ^ b a = 2 ^ 4 = 6同理:b = a ^ b a = 6 ^ 4 = 0000 0110 ^ 0000 0100 = 0000 0010 = 2 a = a ^ b a = 6 ^ 2 = 0000 0110 ^ 0000 0010 = 0000 0100 = 4このように交換が完了したのではないか.これで理解できないなら、次はもっと理解できるQQQがあります!!!まず、異或演算は交換法則と結合法則を有し、上のコード:
  • 		int a = 2;
    		int b = 4;
    		
    		System.out.print("    a " + a);
    		System.out.println(";    b " + b);
    		
    		a = a ^ b;
    		b = a ^ b;
    		a = a ^ b;
    		
    		System.out.print("    a " + a);
    		System.out.print(";    b " + b);
    
                                               a = a ^ b
    	    	                              b = a ^ b=  a ^ b ^ b
    	        b ^ b    ;
    	                         b = a ^ b = a ^ b ^ b = a ^ (b ^ b)
    	                 ,     0,  b b      
    	b b        ,    0,        b ^ b = 0;
    	                                b = a ^ b=  a ^ b ^ b = a ^ 0
    	        ,0 a    ,a      1   0      1,
    	0 0  0,        a。 
    	    				  b = a ^ b=  a ^ b ^ b = a ^ 0 = a = 2
    

    これを理解して、それではこの注釈付きのコードを見てきっと大丈夫です!!
    public static void main(String[] args) {
    
    		int a = 2;
    		int b = 4;
    		
    		System.out.print("    a " + a);
    		System.out.println(";    b " + b);
    		
    		a = a ^ b;//^    
    		b = a ^ b;//b = a ^ b=  a ^ b ^ b = a ^ 0 = a = 2
    				//               
    		a = a ^ b;//  a = a ^ b=  a ^ b ^ a = (a ^ a) ^ b = b = 4
    		
    		System.out.print("    a " + a);
    		System.out.print(";    b " + b);
    	}
    

    //Are you ok??