刚学完java基础,自己编写了一个ATM系统,能指正一下不足之处吗,包括一些很不好的代码习惯

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;

public class UserOperator {
    private ArrayList<User> operator = new ArrayList<>();
    Scanner sc = new Scanner(System.in);
    Random ro = new Random();
//一个用户登录后就赋值该用户的id
    int id =-1;

    public UserOperator() {
    }

    public UserOperator(ArrayList<User> operator) {
        this.operator = operator;
    }

    public void start() {
        lab:while (true) {
            System.out.println("===========欢迎进入系统===========");
            System.out.println("1,用户登录");
            System.out.println("2,用户开户");
            System.out.println("3,退出系统");
            int commond = sc.nextInt();
            switch (commond) {
                case 1:
                    logIn();
                    break;
                case 2:
                    creat();
                    break;
                case 3:
                    System.out.println("系统退出");
                    break lab;
                case 4:
                    showAllData();
                    break ;
            }
        }
    }

//    开户
    public void creat() {
//        定义一个user的对象,用于存储新创建的用户数据
        User user =new User();
        System.out.println("请输入您的用户名");
        user.setName( sc.next()) ;
 //输入性别
        while (true) {
            System.out.println("您的性别");
            user.setSex(sc.next());
            if (user.getSex().equals("男") || user.getSex().equals("女")) {
                break;
            } else {
                System.out.println("您输入的性别有误~");
            }
        }
 //输入密码以及验证密码
        while (true) {
            System.out.println("请输入您的账户密码");
            user.setPassword(sc.nextInt());

            System.out.println("请确认您的密码");
            int password2 = sc.nextInt();
            if (user.getPassword() == password2) {
                break;
            } else {
                System.out.println("两次密码不一致,请重新输入");
            }
        }
        System.out.println("请输入每次取现的限额");
        user.setLines(sc.nextDouble());
//        生成随机卡号
//        我觉得这一段可能有bug
        int k=0;
        String cardNumber = "";
        while (k==0) {
            k=1;
            for (int i = 0; i < 8; i++) {
                cardNumber += ro.nextInt(10);
            }
            for (int i = 0; i < operator.size(); i++) {
                if (operator.get(i).getCardNumber().equals(cardNumber)) {
                    k=0;
                }
            }
        }
        user.setCardNumber(cardNumber);
//        把创建的新user对象放入集合内
        operator.add(user);
        System.out.println("恭喜"+user.getName()+"先生,开户成功,您的卡号为"+cardNumber+"请妥善保管");
    }


    //    用户登入
    public  void logIn() {
        if (operator.size()==0) {
            System.out.println("当前系统无账户");
            return;
        }
//        判断卡号
        lab:while (true) {
            System.out.println("请输入您的登录卡号");
            String cardNumber = sc.next();
            for (int i = 0; i <operator.size() ; i++) {
                if (operator.get(i).getCardNumber().equals(cardNumber)) {
                    id=i;
                    break lab;
                }
            }
            System.out.println("系统不存在该卡号");
        }
//判断密码
        while (true) {
            System.out.println("请您输入登录密码");
            int password = sc.nextInt();
            if (operator.get(id).getPassword() == password) {
                break;
            } else {
                System.out.println("密码错误");
            }
        }
        System.out.println("恭喜您,"+operator.get(id).getName()+"您又已进入系统");
        yeWu();
    }

//登入成功,进入业务系统
    public void yeWu() {
        while (true) {
            System.out.println("=========="+operator.get(id).getName()+"先生,您可以办理以下========");
            System.out.println("1.查询账户");
            System.out.println("2.存款");
            System.out.println("3.取款");
            System.out.println("4.转账");
            System.out.println("5.修改密码");
            System.out.println("6.退出");
            System.out.println("7.注销账户");
            int commond=sc.nextInt();
            switch (commond) {
                case 1:
                    showAccount();
                    break;
                case 2:
                    addBalance();
                    break;
                case 3:
                    getMoney();
                    break;
                case 4:
                    transfer();
                    break;
                case 5:
                    revisePassword();
                    break;
                case 6:
                    return;

                case 7:
                    System.out.println("你确认要注销账户:1.yes 其他任意键.no");
                    int commond2 =sc.nextInt();
                    switch (commond2) {
                        case 1:
                            operator.remove(id);
                            id=-1;
                            return;
                        default:
                            break;
                    }
                    break;


            }
        }
    }


    //1.查询账户
    public void showAccount() {
        System.out.println("==========当前账户信息如下===========");
        System.out.println("卡号:"+operator.get(id).getCardNumber());
        System.out.println("户主:"+operator.get(id).getName());
        System.out.println("性别:"+operator.get(id).getSex());
        System.out.println("余额:"+operator.get(id).getBalance());
        System.out.println("限额:"+operator.get(id).getLines());
        System.out.println("密码:"+operator.get(id).getPassword());
    }


    //  2.  存款
    public void addBalance() {
        System.out.println("请输入您要存入的金额");
        double money = sc.nextDouble();
        operator.get(id).setBalance(operator.get(id).getBalance()+money);//余额加上存款
        showAccount();
    }

    //   3.取款
    public void getMoney() {
        while (true) {
            System.out.println("请输入您要取款的金额");
            double money = sc.nextDouble();
            if (money > operator.get(id).getLines()) {
                System.out.println("您当前取款金额超过每次限额,每次最多可取" + operator.get(id).getLines());
            } else {
                if (money > operator.get(id).getBalance()) {
                    System.out.println("余额不足,您账户目前余额为:" + operator.get(id).getBalance());
                } else {
                    operator.get(id).setBalance(operator.get(id).getBalance()-money);
                    System.out.println("恭喜您,取钱"+money+"元,成功!");
                    showAccount();
                    return;
                }
            }
        }
    }
    //4.转账
    public void transfer() {
//        判断系统账户数量是否大于2
        if (operator.size() < 2) {
            System.out.println("当前系统中小于2个账户,不能进行转账,快去开户吧");
            return;
        }
//        判断自己有没有钱转账
        if (operator.get(id).getBalance() <= 0) {
            System.out.println("您自己都没钱,还是别转了");
            return;
        }
//        下面这一长串代码为确定要转账的人
        int id2=0;//转账人的索引
        lab:while (true) {
            System.out.println("请输入您要转账的卡号");
            String cardNumber = sc.next();
            for (int i = 0; i < operator.size(); i++) {
//         遍历数组寻找与输入卡号相同的卡号,遍历完未找到则循环重新上输入卡号
                if (operator.get(i).getCardNumber().equals(cardNumber)) {
                    String name =operator.get(i).getName().substring(1);
                    System.out.println("请输入[*"+name+"先生]的姓氏");
                    String head = sc.next();
                    if (operator.get(i).getName().startsWith(head)) {
                        id2=i;
                        break lab;
                    } else {
                        System.out.println("您输入的信息有误");
                        break;
                    }
                }
                System.out.println("系统没有该用户");
            }
        }
//        终于能进行转账了,这里还要判断一下钱够不够转账
        while (true) {
            System.out.println("请输入您要转账的金额");
            double money = sc.nextDouble();
            if (money <= operator.get(id).getBalance()) {
                operator.get(id).setBalance(operator.get(id).getBalance() - money);
                operator.get(id2).setBalance( operator.get(id2).getBalance()+money);
                System.out.println("转账成功,您的账户还剩余:"+operator.get(id).getBalance());
                return;
            }
            System.out.println("您的余额不足,您最多可转账:"+operator.get(id).getBalance());
        }
    }

    //5.修改密码
    public void revisePassword() {
        while (true) {
            System.out.println("请输入当前密码");
            int password=sc.nextInt();
            if (password == operator.get(id).getPassword()) {
                System.out.println("请输入新的密码");
                int password1=sc.nextInt();
                System.out.println("请您确认新密码");
                int password2 = sc.nextInt();
                if (password2 == password1) {
                    operator.get(id).setPassword(password1);
                    System.out.println("恭喜您密码修改成功");
                    return;
                }
            }
                System.out.println("您输入不正确");
        }
    }

//登录界面可查看全部账户信息,给自己开的后门
    public void showAllData() {
        for (int i = 0; i < operator.size(); i++) {
            System.out.println("==========当前账户信息如下===========");
            System.out.println("卡号:"+operator.get(i).getCardNumber());
            System.out.println("户主:"+operator.get(i).getName());
            System.out.println("性别:"+operator.get(i).getSex());
            System.out.println("余额:"+operator.get(i).getBalance());
            System.out.println("限额:"+operator.get(i).getLines());

        }
    }


}

代码冗余,注释先写清楚,缩进,换行等,魔法数字可以提取出来导enums枚举中,代码最好优化下

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^