![]()
![]()
![]()
1 import java.util.Scanner;
2 import java.util.Random;
3 public class HomeWork0914 implements HomeWork
4 {
5 /*成员变量、常量定义区*/
6 Scanner scanner=new Scanner(System.in);//定义扫描器实例变量
7
8 char[] a=new char[62]; //定义第二题的验证码取值范围数组
9 int[] x=new int[4]; //定义第二题控制验证码生成的4个随机数的存放数组
10 char[] y=new char[4]; //定义第二题验证码存放数组
11 int state=1; //定义第二题递归方法的控制变量
12 String zhong=""; //定义第二题存放验证码的字符串变量
13
14 int[] num; //定义第三题移位数量的存放数组
15 String password1; //定义第三题存放密码的字符串变量
16 int[] password2; //定义第三题加密后密码存放字符串变量
17 String password3=""; //定义第三题解密后存放密码的字符串变量
18
19 /*方法调用区*/
20 //实现接口,获取家庭作业题目
21 public void getHRMessage()
22 {
23 getMs();
24 }
25 //实现接口,获取家庭作业答卷
26 public void getHR()
27 {
28 home1(); //第一题答卷
29 home2(); //第二题答卷
30 home3(); //第三题答卷
31 }
32 //实现接口,获取家庭作业
33 public void start()
34 {
35 getHRMessage();
36 getHR();
37 }
38
39 /*方法实现区*/
40 //试题方法的实现
41 public void getMs()
42 {
43 System.out.println();
44 System.out.println("题目一:自己实现startsWith()跟endsWith()并测试");
45 System.out.println("题目二:编写验证码生成器,最多可输入5次");
46 System.out.println("题目三:移位实现密码加密解密器");
47 System.out.println();
48 }
49 //第一题方法实现
50 public void home1()
51 {
52 myStartsWith();
53 myEndsWith();
54 }
55 //第二题方法实现
56 public void home2()
57 {
58 myABC(); //生成验证码数组
59 myCodeNumber(x,0,61); //生成0-61之间的4个随机数
60 getMyCode(); //获得验证码
61 myCode(); //验证码5次验证
62 }
63 //第三题方法实现
64 public void home3()
65 {
66 getPassword(); //生成加密密码
67 showPassword(); //还原密码
68 }
69 //myStartsWith()的实现
70 public boolean myStartsWith()
71 {
72 String a1="dfgdagaggdsag";
73 System.out.println("测试startsWith(),测试字符为:"+a1);
74 System.out.println("请输入字符进行判断:");
75 Scanner scanner=new Scanner(System.in);
76 String a2=scanner.nextLine();
77 if(!a2.equals("")&&a1.indexOf(a2)==0)
78 {
79 System.out.println("true");
80 return true;
81 }else
82 {
83 System.out.println("false");
84 return false;
85 }
86 }
87 //myEndsWith()的实现
88 public boolean myEndsWith()
89 {
90 String a1="dfgdagaggdsag";
91 System.out.println("测试endsWith(),测试字符为:"+a1);
92 System.out.println("请输入字符进行判断:");
93 String a2=scanner.nextLine();
94 if(!a2.equals("")&&a1.lastIndexOf(a2)>=0&&a1.substring(a1.length()-a2.length()).equals(a2))
95 {
96 System.out.println("true");
97 return true;
98 }else
99 {
100 System.out.println("false");
101 return false;
102 }
103 }
104 //生成验证码数组
105 public void myABC()
106 {
107 char b1='a';
108 char b2='A';
109 char b3='0';
110 for(int i=0;i<a.length;i++)
111 {
112 if(i<=10)
113 {
114 a[i]=b3;
115 b3++;
116 }
117 if(i>10&&i<=36)
118 {
119 a[i]=b1;
120 b1++;
121 }
122 if(i>36)
123 {
124 a[i]=b2;
125 b2++;
126 }
127 }
128 }
129 //生成不想等任意随机数方法,m是起始数值,n是结束数值,包含m,n本身,后面还要用,又忘记加判断长度的逻辑了...漏下的n-m加上了
130 public void myCodeNumber(int[] a,int m,int n)
131 {
132 Random random=new Random();
133 int r;
134 for(int i=0;i<a.length;i++)
135 {
136 r=random.nextInt(n-m)+m;
137 a[i]=r;
138 for(int j=0;j<i;j++)
139 {
140 if(a[j]==a[i])
141 {
142 i--;
143 break;
144 }
145 }
146 }
147 }
148 //获得验证码,底层逻辑实现,简便方式是使用charAt()跟new String();x数组保存了4个随机数,y数组保存了4个验证码
149 public void getMyCode()
150 {
151 for(int i=0;i<x.length;i++)
152 {
153 for(int j=0;j<a.length;j++)
154 {
155 if(x[i]==j)
156 {
157 y[i]=a[j];
158 break;
159 }
160 }
161 zhong+=y[i];
162 System.out.print(y[i]);
163 }
164 System.out.println();
165 }
166 //验证码验证
167 public void myCode()
168 {
169 System.out.println("请输入图中所显示的验证码");
170 String str=scanner.nextLine();
171 System.out.println(zhong);
172 if(str.equals(zhong))
173 {
174 System.out.println("您的验证码输入正确!");
175 }
176 if(!str.equals(zhong)&&state<=5)
177 {
178 System.out.println("您的验证码输入不对,您还有"+(5-state)+"次机会!");
179 state++;
180 zhong="";
181 myCodeNumber(x,0,61);
182 getMyCode();
183 myCode();
184 }
185
186 }
187 //接收用户输入密码并加密,加密方式是每个字符的char整数值加上一个随机数,最后组成一个全部是数字的字符串
188 public void getPassword()
189 {
190 System.out.println("请输入密码:");
191 password1=scanner.nextLine();
192 num=new int[password1.length()];
193 password2=new int[password1.length()];
194 myCodeNumber(num,20,40); //生成20--40之间的随机数
195 if(password1!=""&&password1.length()>=6)
196 {
197 System.out.print("加密后的密码是:");
198 for(int i=0;i<password1.length();i++)
199 {
200 password2[i]=password1.charAt(i)+num[i];
201 System.out.print(password2[i]);
202 }
203 System.out.println();
204 }else
205 {
206 System.out.println("请输入合法密码!至少6位!");
207 getPassword();
208 }
209 }
210 //解密
211 public void showPassword()
212 {
213 System.out.print("解密后的密码是:");
214 for(int i=0;i<password2.length;i++)
215 {
216 password3=password3+(char)(password2[i]-num[i]);
217 }
218 System.out.println(password3);
219 System.out.println();
220 }
221 }