调整数组中数字的顺序,所有奇数在前半部分,所有偶数在后半部分(包含java交换swap问题)

public class adjust_order  {
// int类型是放在栈空间的,Integer是作为对象放在堆空间的
public static int [] adjust(int[] arr) {
int [] result = new int [arr.length]; 
ArrayList<Integer>front = new ArrayList<Integer>();
ArrayList<Integer>rear = new ArrayList<Integer>();
for (int i = 0; i < arr.length; i++) {
if(arr[i]%2==1) {
front.add(arr[i]);
}else {
rear.add(arr[i]);
}
}
for (int i = 0; i < front.size(); i++) {
result[i]=front.get(i);
}
for (int i = 0; i < rear.size(); i++) {
result[i+front.size()] = rear.get(i);
}
return result;
}

// 另一个思路:前偶后奇就交换
public static Integer[] reOrderArray(Integer[] arr) {
for (int i = 0; i < arr.length; i++) {
for (int j = arr.length-1; j > i; j--) {
if(arr[j]%2==1 && arr[j-1]%2==0) {
swap(arr[j],arr[j-1]);
}
}
}
return arr;

}


public static void swap(Integer a,Integer b) {
if(a==null && b==null) {
return;
}
//获得a的class对象
Class<Integer>integerClass = (Class<Integer>)a.getClass();
try {
//获得value属性
//getDeclaredField返回一个 Field 对象,该对象反映此 Class 对象所表示的类或接口的指定已声明字段(包括私有成员)
Field value = integerClass.getDeclaredField("value");
//设置权限为可访问
value.setAccessible(true);
//交换
int temp=a;
value.setInt(a, b);
value.setInt(b, temp);
}catch(NoSuchFieldException e){
//Class.getField(String name)和Class.getFields()都只能返回公有属性,如果访问私有属性就会报错java.lang.NoSuchFieldException
e.printStackTrace();
}catch(IllegalAccessException e){
e.printStackTrace();
}
}
/* 测试,用Integer类型定义,可以实现交换,用int就不行
public static void main(String[] args) {
Integer a = 3;
Integer b = 4;
swap(a,b);
System.out.println(a);
}
*/

public static void main(String[] args) {
//
int [] test = {2,1,4,5,9,8,7};
int [] out = adjust(test);
Integer [] test1 = {2,1,4,5,9,8,7};
Integer [] out1 = reOrderArray(test1);
for (int i : out) {
System.out.print(i+" ");
}
System.out.println("");
for (int j : out1) {
System.out.print(j+" ");
}
//

//下面为什么交换后3变成了7?是由于调用reOrderArray实例方法时使用swap方法中,已经获得了test1中的缓存数据

System.out.println("");
Integer[] ttt= {3,5};
System.out.print(ttt[0]);
swap(ttt[0],ttt[1]);
System.out.println(ttt[0]);
}
}

猜你喜欢

转载自blog.csdn.net/zkkzpp258/article/details/79724771