两个String案例

我的思考:

用户名和密码可以分别用一个字符串保存,再与输入的字符串分别比较,先比较用户名,成功后再比较密码,注意比较字符串不能直接用 ' = ' ,而是要用String类的方法实现。

我的代码:

//User.java

package 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.java

package 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.java

public 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;
    }
}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值