------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
问题:某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:
首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字, 最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数, 然后,把加密后的结果在控制台打印出来。分析:本题的难点是如何把键盘录入的数据转化为int类型的数组类进行处理,以下提供了两种解决方案:分别是接收String类型的数据和接收int类型的数据。
实现:
复制代码
容易出现的问题和难点:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112import 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的使用
最后
以上就是繁荣书包最近收集整理的关于黑马程序员——数据加密问题的两种实现方式的全部内容,更多相关黑马程序员——数据加密问题内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复