我的思考:
用户名和密码可以分别用一个字符串保存,再与输入的字符串分别比较,先比较用户名,成功后再比较密码,注意比较字符串不能直接用 ' = ' ,而是要用String类的方法实现。
我的代码:
//User.javapackage com.stringlearning;public class User {private String name;private String code;public User() {}public User(String name, String code) {this.name = name;this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getCode() {return code;}public void setCode(String code) {this.code = code;}
}
//Run.javapackage com.stringlearning;import java.util.Scanner;public class Run {public static void run(){User user = new User("itheima","123456");int count = 2;while(true){System.out.println("请用户输入你的用户名:");Scanner sc = new Scanner(System.in);String name = sc.next();System.out.println("请用户输入你的密码:");String code = sc.next();if(user.getName().equals(name) &&user.getCode().equals(code)){System.out.println("欢迎进入系统!");break;}else{if(count == 0){System.out.println("请等待30秒在输入");break;}System.out.println("用户名或密码错误,请重试");count--;}}}
}
//Test.javapublic class Test {public static void main(String[] args) {Run r = new Run();r.run();}
}
反思:
上面的代码过于冗余了,增添了很多不必要的东西,像系统保存的字符串根本不需要单独创建一个类描述,直接用 " "表示即可。还有循环内部也太过复杂,完全不需要计数器count,直接for循环3次,中途达成条件退出就行了。
改进代码:
package com.stringdemo;import java.util.Scanner;public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);for (int i = 0; i < 3; i++) {System.out.println("请输入用户名");String name = sc.next();System.out.println("请输入密码");String code = sc.next();boolean flag = judge(name,code);if(flag == true) {System.out.println("欢迎进入系统");break;}else{System.out.println("用户名或密码错误,请重试");}}}public static boolean judge(String name,String code){String logname = "itheima";String logcode = "123456";return name.equals(logname) && code.equals(logcode);}
}
案例二
我的思考:
该题的关键在于随机验证码的设置,有3种码:随机数字、随机大写字母、随机小写字母。
所以要想每一位随机地出现这3种不同的情况,需要Random随机值。
每一位是什么类型的数据确定后,接下来就是随机索引该位的值,然后用初始字符串+=串起来。
我的代码:
public class Test {public static void main(String[] args) {Scanner sc = new Scanner(System.in);System.out.println("请输入验证码的位数");int num = sc.nextInt();String rs = code(num);System.out.println("验证码是:"+ rs);}public static String code(int num){String rs = "";Random r = new Random();for (int i = 0; i < num; i++) {int n = r.nextInt(3);switch(n){case 0: //数字rs += r.nextInt(10);break;case 1: //大写字母rs += (char)('a'+r.nextInt(26));break;case 2:rs += (char)('A'+r.nextInt(26));break;}}return rs;}
}