使用 Arraylist 在 Java 中创建登录系统

Create a login system in Java using Arraylist

我是一名初级开发人员,对于我的项目,我的目标是从登录开始。

我尝试在同一个功能上分别检查 ID 和密码,一个在另一个里面,就像我接下来要展示的那样

我有一个员工class:

public class Empleado{
    private String id;
    private String passwd;

    public Empleado(String id, String passwd) {
        this.id = id;
        this.passwd = passwd;
    }

}

这是我在 Main 上的进展:

String identificador;
boolean idCheck;
String contrasena;
boolean passCheck;

ArrayList<Empleado> misEmpleados = new ArrayList<>();
misEmpleados.add(new Empleado("EmpleadoA","passA"));
misEmpleados.add(new Empleado("EmpleadoB","passB"));
misEmpleados.add(new Empleado("EmpleadoC","passC"));

do{
  System.out.print("Enter ID: ");
  identificador = input.next();

  idCheck = comprobarId(false, identificador, misEmpleados);
}while(!idCheck);

public boolean comprobarId(boolean check, String id, ArrayList<Empleado> recepcionistas){
        String contrasena;

        for (int i = 0; i < recepcionistas.size(); i++) {

            if(recepcionistas.get(i).getId().equals(id)){

                System.out.print("Introducir contraseña: ");
                contrasena = input.next();

                check = comprobarPass(id, contrasena, recepcionistas);
            }
        }
        return check;
    }


public boolean comprobarPass(String id, String pass, ArrayList<Empleado> recepcionistas){

        for (int i = 0; i < recepcionistas.size(); i++) {

            if(recepcionistas.get(i).getId().equals(pass)){
                check = true;
            }
        }
        return check;
    }

希望有人能帮我一点...现在已经为此苦苦挣扎了 7 个小时。

请原谅我的英语和任何其他错误,这是我的第一个 post/question

在您的 comprobarPass 函数中,您将员工 ID 与密码而不是密码进行比较。我想你是想改变这个

if(recepcionistas.get(i).getId().equals(pass)){
    check = true;
}

至此

Empleado e = recepcionistas.get(i);
if(e.getId().equals(id) && e.getPasswd().equals(pass)){
    check = true;
}

这将在一个函数中检查 ID 和密码是否匹配,而不是单独检查 ID 和密码比较

你已经得到了输入id对应的Empleado,只把这个Empleado传递给comprobarPass方法,而不是整个列表recepcionistas.

在您的代码中,您试图通过在两种方法中循环来完成两次工作。

如果你只循环一次,找到empleado,你不需要再做一次,你可以使用empleado参考。

您的代码的另一个问题是 2 个变量 check:您在方法 comprobarPass 中设置了变量 check 的值,但未声明此变量。另外,在 comprobarId 中,原始布尔值 check 变量作为参数传递,然后修改 returned。这种原始类型变量的用法是一种不好的做法。最好删除此参数和 return 局部变量。

经验法则:越简单越好!

public boolean comprobarId(String id, ArrayList<Empleado> recepcionistas){
    String contrasena;
    boolean check = false;

    for (int i = 0; i < recepcionistas.size(); i++) {

        if(recepcionistas.get(i).getId().equals(id)){

            System.out.print("Introducir contraseña: ");
            contrasena = input.next();

            check = comprobarPass(contrasena, recepcionistas.get(i)); // pass the empleado, not the list
        }
    }
    return check;
}


public boolean comprobarPass(String pass, Empleado recepcionista){
    return recepcionista.getPasswd().equals(pass));
}