/**
* 需求 : 模拟密码加密
键盘录入6个数的int类型的密码
存入数组中 然后反转,//数组的反转
反转后的数组 角标为奇数的互相换 1 和3换 3和 5换 以此类推
然后数组最后一个角标为奇数的元素 和数组中第一个角标为奇数的元素交换
打印出来 就欧了 密码是[1,2,3,4,5,6]的话 答案是[6, 5, 4, 1, 2, 3]
*/
public class SecretTest {
public static void main(String[] args) {
/*
int[] arr = {1,2,3,4,5,6};
print(arr);
reverse(arr);
System.out.print("翻转后: ");
print(arr);
swap(arr);
System.out.print("奇数角标对应的元素交换后:");
print(arr);
swapWithIndex(arr);
System.out.print("第一个奇数角标对应的元素和最后一个奇数角标对应的元素交换后:");
print(arr);*/
int[] arr = getData();
System.out.print("加密前:");
print(arr);
getSecurityArr(arr);
System.out.print("加密后:");
print(arr);
}
//获取加密后的数组
public static void getSecurityArr(int[] arr){
reverse(arr);
swap(arr);
swapWithIndex(arr);
}
//通过键盘录入,返回int[]数组
public static int[] getData(){
int[] arr = {1,2,3,4,5,6};
return arr;
}
public static void print(int[] arr){
System.out.print("[ ");
for(int i=0;i<arr.length;i++){
if(i==arr.length-1){
System.out.print(arr[i]);
} else{
System.out.print(arr[i]+", ");
}
}
System.out.println(" ]");
}
//数组的反转
public static void reverse(int[] arr){
for(int i=0,j=arr.length-1;i<=j;i++,j--){
swap(arr,i,j);
}
}
//数组元素的交换
private static void swap(int[] arr,int i,int j){
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
//反转后的数组 角标为奇数的互相换 1 和3换 3和 5换 以此类推
public static void swap(int[] arr){
for(int i=1,j=i+2;i<arr.length&&j<arr.length;i+=2,j+=2){//1,3 3 5, 5,7
swap(arr,i,j);
}
}
//然后数组最后一个角标为奇数的元素 和数组中第一个角标为奇数的元素交换
public static void swapWithIndex(int[] arr){
int lastIndex = ((arr.length-1)%2==0)?arr.length-2:arr.length-1;
swap(arr, 1, lastIndex);
}
} |