a=10,b=6,将其值互换。(至少3种方法,尝试不定义第3个变量)
互换两个变量值。(至少3种方法,尝试不定义第3个变量)
废话不多说直接上代码
package com.admxj.swap;
/*
* 2015年12月7日23:49:20
* Java可避免C语言的溢出错误
* 方法四可能会出现溢出情况
*/
public class Day01 {
public static void main(String[] args) {
int[] arr = {-2147483449,2147483420};
System.out.println("源数据 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
//方法一
swap_1(arr);
System.out.println("方法一 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
//方法二
swap_2(arr);
System.out.println("方法二 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
//方法三
swap_3(arr);
System.out.println("方法三 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
//方法四
// swap_4(arr);
// System.out.println("方法四 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
//方法5
swap_5(arr);
System.out.println("方法五 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
swap_6(arr);
System.out.println("方法六 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
swap_7(arr);
System.out.println("方法七 : int[0] = "+arr[0] + ", int[1] = "+arr[1]);
}
/*
* 求和, 再减去另一个数
*/
private static void swap_1(int[] arr){
arr[0] = arr[0] + arr[1];
arr[1] = arr[0] - arr[1];
arr[0] = arr[0] - arr[1];
}
/*
* 求差, 与上面类似
*/
private static void swap_2(int[] arr){
arr[0] = arr[0] - arr[1];
arr[1] = arr[0] + arr[1];
arr[0] = arr[1] - arr[0];
}
/*
* 异或运算(对一个数异或两次值不变)
*/
private static void swap_3(int[] arr){
arr[0] = arr[0] ^ arr[1];
arr[1] = arr[0] ^ arr[1];
arr[0] = arr[1] ^ arr[0];
}
/*
*
*/
private static void swap_4(int[] arr){
arr[0] = arr[1]*arr[0];
arr[1] = arr[0]/arr[1];
arr[0] = arr[0]/arr[1];
}
/*
* 中间变量temp
*/
private static void swap_5(int[] arr){
int temp = arr[0];
arr[0] = arr[1];
arr[1] = temp;
}
/*
* (参照齐星)
*/
private static void swap_6(int[] arr){
arr[0] = arr[1] + (arr[1]=arr[0])*0;
}
private static void swap_7(int[] arr){
arr[0] = (arr[1]+arr[0]) - (arr[1] = arr[0]);
}
}