Java初学者碰到的一个判断的小问题,希望和大家分享一下

71 阅读2分钟

今天碰到了一个小问题,作为初学者,这个问题困扰了我比较长的时间,这是一个图书管理系统的登陆模块,代码如下

private void loginMenu() {
    int count = 0;
    User user = null;
    while (true) {
        System.out.println("请输入姓名");
        String name = scanner.next();
        System.out.println("请输入密码");
        String psw = scanner.next();
        user = new User(0, name, psw, 0, 0);
        if (userBiz.login(user)==-1) {
            System.out.println("用户不存在");
            count++;
            if(count==3){
                System.out.println("错误次数已达上限,程序退出");
                exit(0);
            }
            System.out.println("还有"+(3-count)+"次机会");
            while(true){
                if(myUtil.isContinue("是否还要继续")==1){
                    break;
                } else if (myUtil.isContinue("是否还要继续")==2) {
                    return;
                } else {
                    System.out.println("输入错误,请重新输入");
                }
            }
        } else if (userBiz.login(user)==-2){
            System.out.println("密码错误");
            count++;
            if(count==3){
                System.out.println("错误次数已达上限,程序退出");
                exit(0);
            }
            System.out.println("还有"+(3-count)+"次机会");
            while(true){
                if(myUtil.isContinue("是否还要继续")==1){
                    break;
                } else if (myUtil.isContinue("是否还要继续")==2) {
                    return;
                } else {
                    System.out.println("输入错误,请重新输入");
                }
            }
        }else if (userBiz.login(user)==-3){
            System.out.println("登陆成功");
            selfid = userBiz.selectByName(name).getId();
            userSelfMainMenu();
        }
    }
}

这是程序中isContinue方法

public static int isContinue(String message){
    System.out.println(message);
    String choice = scanner.next();
    if (choice.equals("y")){
        return 1;
    }else if (choice.equals("n")){
        return 2;
    }
    return 0;
}

结果发现当我选择继续的时候,一切正常,选择不继续或者输入错误的时候,必须得输入两次才行,如图

微信截图_20230404083118.png

困扰了较长时间才知道问题出在判断哪里,我的isContinue方法里有输入,然后判断那里是用isContinue这个方法去判断,那么第一个如果没判断到第二个还要执行一次

微信图片_20230404092917.png

修改成以下代码即可解决:

private void loginMenu() {
    int count = 0;
    User user = null;
    while (true) {
        System.out.println("请输入姓名");
        String name = scanner.next();
        System.out.println("请输入密码");
        String psw = scanner.next();
        user = new User(0, name, psw, 0, 0);
        if (userBiz.login(user)==-1) {
            System.out.println("用户不存在");
            count++;
            if(count==3){
                System.out.println("错误次数已达上限,程序退出");
                exit(0);
            }
            System.out.println("还有"+(3-count)+"次机会");
            while(true){
                int res = myUtil.isContinue("是否还要继续");
                if(res==1){
                    break;
                } else if (res==2) {
                    return;
                } else {
                    System.out.println("输入错误,请重新输入");
                }
            }
        } else if (userBiz.login(user)==-2){
            System.out.println("密码错误");
            count++;
            if(count==3){
                System.out.println("错误次数已达上限,程序退出");
                exit(0);
            }
            System.out.println("还有"+(3-count)+"次机会");
            while(true){
                int res = myUtil.isContinue("是否还要继续");
                if(res==1){
                    break;
                } else if (res==2) {
                    return;
                } else {
                    System.out.println("输入错误,请重新输入");
                }
            }
        }else if (userBiz.login(user)==-3){
            System.out.println("登陆成功");
            selfid = userBiz.selectByName(name).getId();
            userSelfMainMenu();
        }
    }
}