需求:
某系统的数字密码,比如1983,采用加密方式进行传输
规则如下:
先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。
程序实现:
import java.util.Scanner;
public class Test28 {
public static void main(String[] args) {
// 加密数据
// 1.录入要加密数据的个数
Scanner sc = new Scanner(System.in);
System.out.println("请您输入要加密数据的个数:");
int length = sc.nextInt();
// 2.动态初始化数组
int[] datas = new int[length];
// 3.遍历数组,依次录入数据并存入到数组中去
for(int i = 0;i < datas.length;i++){
System.out.println("请您录入第" + (i + 1) + "个要加密的数据:");
int data = sc.nextInt();
datas[i] = data;
}
// 4.打印当前数组并展示
System.out.println("加密前的数据为:");
printArray(datas);
// 5.对当前数据进行加密操作并打印加密后的数组
System.out.println("加密后的数据为:");
printArray(encryptionProgram(datas));
}
/**
* 加密数据的功能:先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转
* @param arr:要加密数据的数组
* @return:返回被加密数据的数组
*/
public static int[] encryptionProgram(int[] arr){
// a.遍历数组得到每位数,加上5再对10求余
for(int i = 0;i < arr.length;i++){
arr[i] = (arr[i] + 5) % 10;
}
// b.将所有数字反转:定义两个游标,一个在头,一个在尾,当头 < 尾,将两者对应位置处的元素互换
for(int i = 0,j = arr.length - 1;i < j;i++,j--){
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
// 3.最终返回被加密的数组
return arr;
}
/**
* 打印数组的功能
* @param arr:要打印的数组
*/
public static void printArray(int[] arr){
System.out.print("[");
for(int i = 0;i < arr.length;i++){
System.out.print(i == arr.length - 1 ? arr[i] : arr[i] + ", ");
}
System.out.println("]");
}
}