0914作业

  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 }    
原文地址:https://www.cnblogs.com/kaililikai/p/5875157.html