概述
------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
问题:某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字, 最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数, 然后,把加密后的结果在控制台打印出来。分析:本题的难点是如何把键盘录入的数据转化为int类型的数组类进行处理,以下提供了两种解决方案:分别是接收String类型的数据和接收int类型的数据。
实现:
import java.util.Scanner;
/*
* 某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,
在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,
然后,把加密后的结果在控制台打印出来。
分析:
键盘录入数据
写一个方法给数据加密
首先键盘录入一个8位数并想办法存入一个int类型的数组中
然后按要求对数组中的数操作
输出加密后的数据
*/
public class Encrypt {
public static void main(String[] args) {
// 键盘录入一个8位数
// 用什么类型的数据来接收呢,我们写两个方法一个接收的是int类型,另一个接收的是String类型
Scanner sc = new Scanner(System.in);
System.out.println("请录入一个不大于8位的整数:");
String str = sc.nextLine();
// 写一个接收String类型的加密方法
String line2 = enctypt2(str);
System.out.println(line2);
System.out.println("------------------");
System.out.println("请再次录入刚才的数据:");
int num = sc.nextInt();
// 写一个接收int类型数据的加密方法
String line = enctypt(num);
System.out.println(line);
}
private static String enctypt2(String str) {
/*
* 刚才的难点是如何得到各位上的数并存储到数组中,以及index的使用 本题的难点是,如何把String类型的数据转换为int类型的数组
* 分析: 可以先得到char数组,遍历数组得到每个字符,并转化为String类型 然后再通过String类型转换为int类型存入另一个数组中
*/
char[] chs = str.toCharArray();
// 定义一个与chs等长的int数组
int[] is = new int[chs.length];
// 遍历chs数组得到每个元素,先转化为String类型然后再转换为int类型,存入is中
for (int x = 0; x < chs.length; x++) {
is[x] = Integer.parseInt(String.valueOf(chs[x]));
}
// 至此,int数组创建完毕,且此时是正序,将数据倒序
for (int start = 0, end = is.length-1; start < end; start++, end--) {
int temp = is[start];
is[start] = is[end];
is[end] = temp;
}
// 将每位数字都加上5,再用和除以10的余数代替该数字
for (int x = 0; x < is.length; x++) {
is[x] += 5;
is[x] %= 10;
}
// 将第一位和最后一位数字交换
int temp = is[0];
is[0] = is[is.length - 1];
is[is.length - 1] = temp;
// 用字符串拼接结果
StringBuilder sb = new StringBuilder();
for (int x = 0; x < is.length; x++) {
sb.append(is[x]);
}
return sb.toString();
}
private static String enctypt(int num) {
/*
* 分析: 如何把一个int类型的数据转换为一个int类型的数组 我们要得到的是各位上的数,可以使用%10取余的方式获取个位数,
* 然后除以10再次%10取余得到十位数 如此循环下去,直到除后的数不大于1
*/
// 首先定义一个int数组
// 因为最大数是8位数,所以我们定义一个长度为8的数组,然后再定义一个最大索引index
// 我们操作时,只操作到最大数组即可
int arr[] = new int[8];
// 得到各位上的数并赋值给int数组
int index = 0;
while (num >= 1) {
arr[index] = num % 10;
num /= 10;
index++;
}
// 此时的index等于数组的实际已经被赋值的个数
// 此时已经得到了int数组,且已经完成了倒序
// 将每位数字都加上5,再用和除以10的余数代替该数字
// for (int i : arr) {
// i += 5; 这里的增强for为什么不能用呢???????
// i %= 10;
// }
for (int x = 0; x < index; x++) {
arr[x] += 5;
arr[x] %= 10;
}
// 将第一位和最后一位数字交换
int temp = arr[0];
arr[0] = arr[index - 1];
arr[index - 1] = temp;
// 用字符串拼接结果
StringBuilder sb = new StringBuilder();
for (int x = 0; x < index; x++) {
sb.append(arr[x]);
}
return sb.toString();
}
}
容易出现的问题和难点:
A:键盘录入的问题,当只创建一个Scanner对象时,要先录入String类型,然后录入int类型。
B:字符串转int数组难点:is[x] = Integer.parseInt(String.valueOf(chs[x]));
C:int类型数据转int数组的难点,index的使用
最后
以上就是繁荣书包为你收集整理的黑马程序员——数据加密问题的两种实现方式的全部内容,希望文章能够帮你解决黑马程序员——数据加密问题的两种实现方式所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复